我在使用passport和jwt设置我的第一个项目时遇到了问题。使用Postman时,我尝试使用不同的帐户登录,但如果我尝试返回req.user对象,它将返回同一用户的信息。否则,如果我尝试登录jwt_payload,它是正确的(不同用户的信息)。有人能给我解释一下原因吗?(我插入选项session: false)
我的jwt策略函数:
var confStrategy = function(passport) {
passport.use( new JwtStrategy( opts, function(jwt_payload,done) {
User.findOne({id: jwt_payload.sub},function(err,user) {
if(err) return done(err,none);
if(user) {
done(null,user);
} else {
done(null,false);
}
});
}));
};app.js代码片段
app.use(passport.initialize());
passConf.confStrategy(passport);
app.get('/api/:name',passport.authenticate('jwt', { session: false }),function(req,res) {
console.log(req.user);
res.send('Hello ' + req.user.email);
});发布于 2016-12-08 04:27:47
在passport中间件中,编辑JwtStrategy行
发自:
{id: jwt_payload.sub}至:
{_id: jwt_payload._doc._id}发布于 2017-02-10 05:57:46
我也遇到了同样的问题!下面的代码对我很有效。
module.exports = function(passport) { ;
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findById(jwt_payload._id, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
done(null, user);
} else {
done(null, false);
}
});
}));
};问题出在User.findOne({id: jwt_payload.sub},...
发布于 2017-06-07 23:07:18
您需要检查生成JWT令牌的代码,无论您在JWT生成期间设置了什么有效负载。当JWTStrategy解码的时候,你会得到相同的有效载荷和相同的名字。(因为你每次都得到相同的用户,所以检查它是否是硬编码的)
下面的行将生成JWT令牌
var token = jwt.sign({uid: user.id}, secretOrKey, {expiresIn: 6000});下面是JWT策略代码。
passport.use(new JwtStrategy(jwtOptions, function(_payload, _next) {
var done = false;
if((_payload.uid)) {
//Do something
}
}));您需要保持名称不变(在上面的例子中是uid)
https://stackoverflow.com/questions/39905418
复制相似问题