我有一个问题,它总是返回未经授权的我。当我设置头授权的令牌收到。它返回与。
未经授权
。
router.get('/dashboard', passport.authenticate('jwt', {session: false}), (req, res) => {
res.json('It worked: User ID is: ' + req.user._id);
});
。
var jwtOptions = {
jwtFromRequest: ExtractJwt.fromAuthHeader(),
secretOrKey: config.jwt.secretOrKey
//issuer: config.jwt.issuer,
//audience: config.jwt.audience,
};
passport.use(new JWTStrategy(jwtOptions, (jwt_payload, done) => {
User.findOne({id: jwt_payload.id}, (err, user) => {
if (err) {
return done(err, false);
}
if (!user) {
return done(null, false);
}
return done(null, user);
});
}));
8条答案
按热度按时间hgtggwj01#
你必须改变这些事情:
1)您必须将
jwtFromRequest: ExtractJwt.fromAuthHeader(),
更改为jwtFromRequest :ExtractJwt.fromAuthHeaderAsBearerToken(),
2)设置标题:
Authorization:Bearer {token}
3)将
jwt_payload._id
更改为jwt_payload._doc._id
kulphzqa2#
我遇到了同样的问题!下面的代码对我有效。
问题出在
User.findOne({id: jwt_payload.id}, ...
此外,在将令牌附加到标头时,请在 AJAX 调用中使用以下格式的“beforeSend”:
htrmnn0y3#
你可能在
request header
中出错了,按照README应该是'Authorization' = 'bearer token_received_on_login'
ql3eal8s4#
只需进行一项更改,使用
jwt_payload._doc.id
代替jwt_payload.id
jum4pzuy5#
1.将标题从
res.json({token: 'JWT ' + token})
设置为res.json({token: 'Bearer ' + token})
jwt_payload.data._id
对我很有效z9gpfhce6#
VS代码服务器挂起这将发生,因为在您的代码中的一些错误。它不是特定于任何常见的代码更改。它可以是任何小的代码错误所做的你。在我的情况下,我使用
代替
xzlaal3s7#
在我的例子中,不是使用相同的秘密值来签名和提取jwt。在为两个场景设置相同的秘密值后,身份验证就像一个魅力。
当使用jsonwebtokennpm包创建jwt时
提取护照内的jwt时
nfeuvbwi8#
在我的例子中:是算法
我删除了“算法:['RS256']”而且它成功了(在2个小时内解决了这个问题,感觉有点无聊)