【问题标题】:How to get user JWT token in JWTStrategy (NestJS)?如何在 JWTStrategy (NestJS) 中获取用户 JWT 令牌?
【发布时间】:2021-12-29 12:36:16
【问题描述】:

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

  async validate(payload: LoginPayload) {
    const { email, firstName, lastName, sub } = payload;
    return {
      id: sub,
      email,
      firstName,
      lastName,
    };
  }

【问题讨论】:

    标签: jwt nestjs


    【解决方案1】:

    要具体访问令牌,您需要在JwtStrategyconstructorsuper 调用中传递passReqToCallback: true。现在JwtStrategy#validate方法的第一个参数是req,第二个参数是token有效载荷,所以你可以调用`req.headers['authorization'].split(' ')[1]来获取token本身。比如:

    @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,
        };
      }
    }
    

    【讨论】:

    • 谢谢,这正是我要找的!
    猜你喜欢
    • 2020-05-05
    • 2021-07-05
    • 2020-05-13
    • 2019-11-07
    • 2019-08-01
    • 2018-01-09
    • 2021-10-14
    相关资源
    最近更新 更多