【问题标题】:Passport-jwt different tokens same resultPassport-jwt 不同的令牌相同的结果
【发布时间】:2017-02-15 18:07:20
【问题描述】:

我在使用护照和 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 sn-p

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);
});

【问题讨论】:

    标签: node.js authentication express jwt passport.js


    【解决方案1】:

    您需要检查生成 JWT 令牌的代码,无论您在 JWT 生成期间设置了什么有效负载。当 JWTStrategy 解码时,您将获得具有相同名称的相同 Payload。 (因为您每次都获得相同的用户,请检查它是否是硬编码的)

    下面一行生成 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

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题!下面的代码对我有用。

      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}, ...

      【讨论】:

        【解决方案3】:

        在passport中间件中,编辑JwtStrategy这一行:

        发件人:

        {id: jwt_payload.sub}
        

        收件人:

        {_id: jwt_payload._doc._id}
        

        【讨论】:

          猜你喜欢
          • 2017-08-15
          • 2015-07-20
          • 2017-03-04
          • 2018-04-21
          • 1970-01-01
          • 2017-09-07
          • 2020-10-10
          • 1970-01-01
          • 2019-10-30
          相关资源
          最近更新 更多