尝试使用passport-jwt到达受保护的路线时获得401状态

时间:2019-02-05 01:07:43

标签: node.js express passport.js http-status-code-401 passport-jwt

我正在尝试让JWT与passport.js一起使用,我有一个本地策略可以注册,另一个可以登录用户。目前,我通过执行以下操作来返回令牌:

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

我使用与拨打护照相同的方法来制定本地策略。

我认为我已经包含了所有有价值的东西,如果缺少某些内容,请说出来,我将用它来更新操作规范。

谢谢!

编辑**

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

0 个答案:

没有答案