前言
当我们在一些实际项目的时候,我们可能会涉及到一些鉴权的功能,比如当我们没有进行登录的时候,也就是没有一些身份验证信息的时候,我们在地址栏是无法进行访问其他的页面的。
实现思路
先下载模块
npm i express-jwt
npm i jsonwebtoken
下载完需要用到的模块后,引入jsonwebtoken
然后,通读代码,就是得到传过来的请求体携带的用户名和密码,生成一个密钥,被携带上。
router.post("/login",async function(req,res){
var user=await userModel.find({username:req.body.username,password:req.body.password,})
if(user.length!=0){
var token=jwt.sign({
data:"admin",
},'secret',{expiresIn:"30000s"},httpOnly=true);
res.json({"message":"登陆成功","code":200,token:"Bearer"+" "+token})
}
})
接下来在入口文件app.js中做一些操作
首先依然是先引入express-jwt,并且命名为expressjwt
然后在下方写上一些判断,此中,secret是上文编写所带名,algorithms:['HS256']是固定的,unless..的意思是:出了访问/login这个路径的页面外,其他页面在没带token的情况下,是无法访问的,并且返回下文,也就是无效token等。
app.use(expressjwt({
secret:"secret",
algorithms:['HS256']}).unless({path:["/login"]}))
app.use(function(err,req,res,next){
if(err.name==="UnauthorizedError"){
res.json({"message":"无效token","code":400})
}
})
在这里,要需要注意几点,我在进行代码编写的时候,没有很注意代码的逻辑,从而导致没有生效。
一定要放在引入文件的上面,不然的话,按照逻辑是无法生效的。
我们来看一下,是怎么样,实现jwt验证的。
因为我们要进行一个注册,所以我们把/add这个也添到允许路径里面
然后我们去添加一个用户
然后我再去进行登录,也就是/login路径,我们可以看到,此时已经生成了一段token携带
把这段token信息手动加上后,我们会发现现在是可以访问成功。
如果把那段token信息取消勾选后,再去访问/user的话,是无法访问的,并且无效token信息。
到此,后端编写就完成拉~~~剩下就是在前端的一些操作,进行判断,然后在router文件进行引入就ok啦