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