0

我有一个 Nestjs 网关,我试图根据标头中的值运行授权逻辑,但无论我试图访问握手,它总是返回“未定义”

我也在通过 SSL 尝试这个,这可能会有所作为。

main.ts:

    import { WsAdapter } from "@nestjs/platform-ws";

    app = await NestFactory.create(UserMicroserviceModule, {
      httpsOptions: {
        key: get_ssl("key"),
        cert: get_ssl("cert"),
      },
    });

    app.useWebSocketAdapter(new WsAdapter(app));
    await app.listen(process.env.PORT || 443);

网关.ts:

@UseGuards(SessionGuard)
@WebSocketGateway({ path: "/user" })
export class UserMicroserviceGateway implements OnGatewayConnection {

  handleConnection(socket) {
     socket.handshake // <== undefined
  }

session.guard.ts:

    const socket_cookie: any = context.switchToWs().getClient().handshake; // <== undefined

而且,虽然我已经在整个网关上添加了会话保护 --- 保护不会触发 handleConnection()

4

1 回答 1

0

Guards 和其他装饰器目前不适用于nestjs 中的 handleConnection() 方法,握手不是 vanilla 套接字上存在的概念,而是更多 socket.io 的东西,所以我只是切换到使用它并手动运行在 handleConnection() 方法中进行验证所需的操作。

于 2021-10-22T08:47:39.553 回答