看下面一段代码
//验证成功后获取信息
app.get("/paprika/getinfo",(req,res)=>{
console.log(req.user)
res.send({
status:200,
message:"获取用户信息成功!!!",
data:req.user
})
})
其中的req.user其实是大家惯有的写法,一开始看到可能会感到奇怪 我们之前只见过req.body(用在post的表单数据的获取)或者req.query(用在get的url参数数据的获取)
而这里出现一个req.user 那就很奇怪了 其实这是JWT独有的写法
如下面的代码:
const jwt = require('jsonwebtoken');
const expressJwt = require('express-jwt');
// 设置 JWT 密钥
const secretKey = 'my_secret_key';
// 创建 JWT 中间件
const jwtMiddleware = expressJwt({ secret: secretKey });
// 在路由处理链中注册中间件
app.use(jwtMiddleware);
// 处理受保护的路由
app.get('/protected', (req, res) => {
// 获取存储在 JWT 中的用户信息
const user = req.user;
// 返回用户信息
res.send(`Hello, ${user.username}!`);
});
在受保护的路由中 如果验证secret密钥成功 那么能获取客户端发来的用户填写的数据 直接用req.use获取 但是我们也是可以改变这个写法的 不一定就一定得用req,user
在上面的示例中,req.user
是一个通用的惯例,用于存储从 JWT 中解析出来的用户信息,并在后续的路由处理函数或中间件中使用该对象来获取用户信息。如果您希望使用其他名称来存储用户信息,可以根据自己的需要修改代码。
例如,如果您喜欢将用户信息存储在 req.currentUser
属性中,可以在调用 express-jwt
中间件时指定 userProperty
选项来更改属性名称,如下所示:
const jwtMiddleware = expressJwt({
secret: 'my_secret_key',
userProperty: 'currentUser' // 将用户信息存储在 req.currentUser 属性中
});
app.use(jwtMiddleware);
app.get('/protected', (req, res) => {
const user = req.currentUser;
res.send(`Hello, ${user.username}!`);
});
在上面的示例中,express-jwt
中间件会将解码后的用户信息存储在 req.currentUser
属性中,因此在 /protected
路由处理函数中,我们使用 req.currentUser
来获取用户信息。
需要注意的是,修改 userProperty
选项的值可能会影响其他代码对 req.user
属性的使用,因此建议在整个应用程序范围内使用统一的命名规范。