不能使用passport-jwt访问受保护的路由

问题描述 投票:0回答:1

我无法对秘密资源进行身份验证,我正在使用登录令牌进行呼叫,但我每次都会收到未经授权的响应。

  passport.use(
  new JwtStrategy(
    {
      jwtFromRequest: ExtractJwt.fromHeader("Authorization"),
      secretOrKey: jwtSecret
    },
    async (payload, done) => {
      try {
        const user = await User.findById(payload.sub);
        console.log(payload.sub);
        if (!user) {
          return done(null, false);
        }
        done(null, user);
      } catch (error) {
        done(error, false);
      }
    }
  )
);

controllers / users.js:

const signToken = user => {
  return jwt.sign(
    {
      iss: "nikname",
      iat: new Date().getTime(),
      sub: user._id,
      exp: new Date().setTime(new Date().getDate() + 1)
    },
    jwtSecret
  );
};

路线:

router.route('/secret')
.get(passport.authenticate('jwt',{session: false}),usersController.secret);

由于错误不清楚,我无法弄清楚问题。任何帮助?非常感谢

express jwt postman unauthorized passport-jwt
1个回答
0
投票

在使用jwt调试器后,似乎有一个有效负载问题,虽然调试器显示了验证的令牌标志,但'exp'和'iat'显示错误的日期,所以我改变了signToken常量,如下所示:

    const signToken = user => {
  return jwt.sign(
    {
      iss: "nikname",
      sub: user.id,
    },
    jwtSecret,
    {
      expiresIn: '2d'
    }
  );
};

在研究之后,似乎fromHeader(提取器)在[email protected]中运行不正常,所以我使用了fromAuthHeaderWithScheme。像这样 :

jwtFromRequest: ExtractJwt.fromAuthHeaderWithScheme('JWT'),

现在它工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.