nodejs——jwt认证
·
首先在终端执行npm init -y 命令进行初始化

然后执行npm install express 命令安装express相关的包

执行npm install jsonwebtoken express-jwt 命令安装jwt相关包

导入JWT相关的包

定义secret密钥

在登录成功后生成JWT字符串(这里的token有效期最好设置时间长一点,因为时间太短会导致后面操作数据无法显示)

将JWT字符串还原为JSON对象

使用req.auth获取用户信息(这里不要使用req.user来获取因为新版的express-jwt废弃了req.user,改用req.auth存储解析后的Token内容)

捕获解析JWT失败后产生的错误

以下是完整代码:
const express = require('express');
const app = express();
app.use(express.json());
app.use(express.urlencoded({extended:false}));
//导入用于生成JWT字符串的包
const jwt = require('jsonwebtoken');
//导入用于将客户端发送过来的JWT字符串,解析还原成JSON对象的包
const { expressjwt: expressJWT } = require('express-jwt');
//secret密钥的本质:就是一个字符串
const secretKey = 'itheima No1 ^_^';
//登录接口
app.post('/api/login',function(req,res){
if(req.body.username !== 'admin'|| req.body.password !== '000000'){
return res.send({status:1, msg:'登录失败'});
}
//用户登录成功之后,生成JWT字符串,通过token属性响应给客户端
res.send({
status:200,
msg:'登录成功',
token:jwt.sign({
username:req.body.username
},secretKey,{
expiresIn:'1h' //token的有效期为1h
})
})
})
//使用app.use()来注册中间件
//expressJWT({secret:secretKey})就是用来解析Token的中间件
//.unless({path:[/^\/api\//]})用来指定哪些接口不需要访问权限
app.use(expressJWT({secret:secretKey,algorithms:['HS256']}).unless({path:[/^\/api\//]}));
//这是一个有权限的API接口
app.get('/admin/getinfo',function(req,res){
console.log(req.auth);
res.send({
status:200,
message:'获取用户信息成功',
data:req.auth
})
})
//错误
app.use((err,req,res,next)=>{
//token解析失败导致的错误
if(err.name === 'UnauthorizedError'){
return res.send({status:401,message:'无效的token'})
}
//其他错误
res.send({status:500,message:'未知错误'})
})
app.listen(3000,()=>{
console.log('3000端口服务已开启');
})
使用apifox进行测试,首先要在终端执行node node27.js命令

然后在apifox中先执行post来获取token

然后执行GET来获取信息(这里要传入token在Header中)

更多推荐




所有评论(0)