使用 express-jwt 无法获取 req.user 对象
2020-10-08
2246
以下是我使用
express-jwt
的设置:
exports.requireSignin = expressJwt({
secret: process.env.JWT_SECRET,
algorithms: ["HS256"],
userProperty: "auth"
});
我正在使用它访问秘密路由进行测试,但是我没有在此处的路由中获取
req.user
属性。它导致一个空对象(未定义)。
router.get("/secret",requireSignin,(req, res) => {
res.json({
message: req.user,
});
});
我正在使用 Postman 进行测试并将带有授权标头的令牌作为承载令牌发送。
3个回答
我也被这个练习难住了。要解决这个问题,请改用 req.auth,如下所示:
router.get("/secret",requireSignin,(req, res) => {
res.json({
user: req.auth,
});
});
希望它有用。祝你好运。
Kevin Narsh
2020-10-16
requestProperty
决定解码后的令牌的存储位置,对于
express-jwt
版本 < 6,默认情况下为
user
,现在为
auth
。如果您希望
req.user
不未定义,请尝试:
import { expressjwt } from 'express-jwt';
exports.requireSignin = expressjwt({
secret: process.env.JWT_SECRET,
algorithms: ["HS256"],
requestProperty: "user",
});
或者在当前设置中使用
req.auth
代替
req.user
。
Sylhare
2023-06-09
您没有从请求中验证/解码您的 JWT 令牌,解码后,将其分配给
req
对象并调用
next()
const JWT = require('jsonwebtoken')
module.exports.requireSignin = (req, res, next) => {
const token = req.headers.authorization
if (!token) {
res.status(400).json({ status: false, message: 'Token required' })
}
JWT.verify(token, process.env.JWT_SECRET, (err, decoded) => {
if (err) {
console.log(`JWT: ${err.message}`)
return res
.status(401)
.json({ status: false, error: 'Token is not valid' })
}
req.user = decoded
next()
})
}
哦,您正在使用
express-jwt
包。我一开始没看出来我的答案是关于如何在
req
中获取令牌有效负载对象的一般性答案。希望它能在未来帮助到别人。
Rohit Ambre
2020-10-08