0

我实施了passport-jwt来验证受保护路由上的用户,并且我想在创建第一个管理员之前检查用户登录,请帮助我如何做到这一点。这是我实施的护照-jwt 代码

exports.getToken = function (user) {
  return jwt.sign(user, config.secretKey, { expiresIn: 3600 });
};

var opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = config.secretKey;

exports.jwtPassport = passport.use(
  new JwtStrategy(opts, (jwt_payload, done) => {
    console.log("JWT payload: ", jwt_payload);
    User.findOne({ _id: jwt_payload._id,  }, (err, user) => {
      if (err) {
        return done(err, false);
      } else if (user) {
        return done(null, user);
      } else {
        return done(null, false);
      }
    });
  })
);
4

1 回答 1

0

如果我正确理解您的问题,您已经验证了一个用户并且他已经登录。现在,在创建管理员之前,您要检查当前登录的用户是否没有过期或其他什么。正确的 ?

要做到这一点:

  1. 您需要将 JWT 存储在客户端,以便无论何时调用 API,都可以将 JWT 附加到请求的身份验证标头中。我说 Authentication 标头是因为您的ExtractJWTStrategy 是fromAuthHeaderAsBearerToken.

  2. 有了这个,您可以将您的令牌附加到后续的 API 调用标头。您还需要在服务器端实现一个中间件,以便控制器可以验证 Authorization 标头中的 JWT 是有效还是无效。

是了解管道的好资源。请注意,在此资源中,它们fromUrlQueryParameter作为提取策略,但概念是相同的。

于 2020-12-16T14:50:27.010 回答