1

我正在使用JWTwithpassport.js进行身份验证。我有一个local strategy注册和另一个登录用户。目前,我让它通过执行以下操作返回令牌:

req.login(user, {session: false}, (err) => {
    if (err) {
      res.send(err);
    }
    var jwtUser = {
      _id: user.id,
      email: user.email
    };
    const token = jwt.sign(jwtUser, config.passport.jwtSecret);
    return res.json({jwtUser, token});
});

这将返回一个对象,如:

{"jwtUser":
 {
    "_id":"5c55f0be9ddcf71a704d92b2",
    "email":"john.doe@example.com"
  },
 "token":"<token>" // redacted this because it contains my personal email
}

所以我得到了一个正确的令牌(我已经使用在线解码器进行了检查,它提供了正确的用户 ID 和正确的电子邮件)。

当我使用此路由尝试测试 JWT 策略是否有效时,我收到 401 未经授权的访问消息。

这是我的 JWT 策略

var opts = {};
opts.jwtFromRequest = ExtractJWT.fromAuthHeaderAsBearerToken();
opts.secretOrKey = config.passport.jwtSecret;
passport.use('jwt', new JWTstrategy(opts, function(jwt_payload, done) {
  console.log('payload received: ', jwt_payload);
    User.findOne({id: jwt_payload.id}, function(err, user) {
      console.log('User: ', user);
      if (user) {
        console.log(user);
        return done(null, user);
      }
      if (err) {
        return done(err, false);
      }
    });
}));

我的路线

router.get('/auth/test', passport.authenticate('jwt', { session: false }), (req, res) => {
  res.send('You reached a private route.');
});

我的本地策略使用与调用护照相同的方法工作。

我想我已经包含了所有有价值的东西,如果缺少某些东西,请说,我会用它更新 OP。

我应该注意我正在使用邮递员对此进行测试并使用不记名令牌的授权方法。

提前致谢!

4

0 回答 0