Nestjs wss handleConnection(socket) socket.handshake 未定义,无法访问 headers 进行身份验证
Nestjs wss handleConnection(socket) socket.handshake is undefined and cannot access headers to authenticate
我有一个 Nestjs 网关,我在其中尝试 运行 授权逻辑,具体取决于 headers 中的值,但无论我在哪里尝试访问握手,它总是 returns '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
而且,虽然我在整个网关上添加了 session 守卫 --- 守卫不会触发 handleConnection()
Guards 和其他装饰器目前不适用于 nestjs 中的 handleConnection() 方法,并且握手不是 vanilla socket 上存在的概念,而是更多 socket.io 的东西,所以我只是切换到使用它并手动 运行 handleConnection() 方法中验证所需的操作。
我有一个 Nestjs 网关,我在其中尝试 运行 授权逻辑,具体取决于 headers 中的值,但无论我在哪里尝试访问握手,它总是 returns '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
而且,虽然我在整个网关上添加了 session 守卫 --- 守卫不会触发 handleConnection()
Guards 和其他装饰器目前不适用于 nestjs 中的 handleConnection() 方法,并且握手不是 vanilla socket 上存在的概念,而是更多 socket.io 的东西,所以我只是切换到使用它并手动 运行 handleConnection() 方法中验证所需的操作。