Nestjs wss handleConnection(socket) socket.handshake не определен и не может получить доступ к заголовкам для аутентификации

У меня есть шлюз Nestjs, где я пытаюсь запустить логику авторизации в зависимости от значений из заголовков, но где бы я ни пытался получить доступ к рукопожатию, он всегда возвращает undefined

Я также пробую это через 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);

gateway.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 ()

1 ответ

Решение

Охранники и другие декораторы в настоящее время не работают для метода handleConnection() в nestjs, а рукопожатие - это не концепция, существующая в ванильном сокете, а скорее вещь socket.io, поэтому я просто переключился на его использование и запустил вручную действия, необходимые для проверок внутри метода handleConnection().

Другие вопросы по тегам