微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nestjs JwtStrategy 访问上下文

如何解决Nestjs JwtStrategy 访问上下文

我的 WebSocket 中有一个 UseGuard。实际上,这个守卫是一个扩展 JwtAuthGuardAuthGuard('jwt')JwtAuthGuard一个名为 JwtStrategy 的策略类。在这个类中,我有一个 validate 方法。在基于 HTTP 的请求中,我以这种方法返回 payload。然后 nestjs 将有效负载附加到 req。这是我的策略课:

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor(private authConfigService: AuthConfigService) {
    super({
      jwtFromrequest: ExtractJwt.fromAuthHeaderAsBearerToken(),ignoreExpiration: false,secretorKey: authConfigService.JWT_SECRET,});
  }

  async validate(payload: any) {
    return payload;
  }
}

我想在 validate 方法中访问 context,以便将有效负载附加到 WebSocket 的主体(或我可以访问有效负载的任何内容)。有什么想法吗?

解决方法

您无需对策略类进行任何修改。相反,您应该修改 JwtAuthGuardgetRequest 方法(如果您没有,那么您应该创建一个),该方法返回一个具有 headers 属性的对象,该对象是一个对象带有一个字符串的 authorization 属性。类似的东西

@Injectable()
export class JwtAuthGuard extends AuthGuard('jwt') {
  getRequest(context: ExecutionContext) {
    const ws = context.switchToWs().getClient(); // possibly `getData()` instead.
    return {
      headers: {
        authorization: valueFromWs(ws),}
    }
  }
}

您还可以使用 if/elseswitch 语句并根据 contextType 中的 context.getType() 返回正确的对象,从而使这项工作在不同的上下文类型中起作用。无论从这个 getRequest 方法返回什么,passport 最终都会附加 user 属性,因此使用这些额外值返回整个客户端可能是有意义的。 >

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?