如何在 JWTStrategy (NestJS) 中获取用户 JWT 令牌?

Tsu*_*suu 0 jwt nestjs

我的问题是我想检查数据库中的登录令牌是否无效(更改密码后)。但是,JWTStrategy 中的验证函数只能访问 JWT 的有效负载,而不能访问令牌。我想知道是否有办法可以从此类或 JWTAuthGuard 的请求中获取 JWT 令牌。谢谢!

  async validate(payload: LoginPayload) {
    const { email, firstName, lastName, sub } = payload;
    return {
      id: sub,
      email,
      firstName,
      lastName,
    };
  }
Run Code Online (Sandbox Code Playgroud)

Jay*_*iel 6

要专门访问令牌,您需要传入passReqToCallback: true' ssuper的调用。现在该方法的第一个参数是令牌有效负载,因此您可以调用 `req.headers['authorization'].split(' ')[1] 来获取令牌本身。就像是:JwtStrategy constructor JwtStrategy#validatereq

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super({
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      ignoreExpiration: false,
      secretOrKey: jwtConstants.secret,
      passReqToCallback: true
    });
  }

  async validate(req: e.Request, payload: LoginPayload) {
    const rawToken = req.headers['authorization'].split(' ')[1];
    const { email, firstName, lastName, sub } = payload;
    return {
      id: sub,
      email,
      firstName,
      lastName,
    };
  }
}
Run Code Online (Sandbox Code Playgroud)