Mic*_*elB 4 cookies node.js socket.io nestjs nestjs-gateways
我的守卫包含以下代码:
let client: Socket = context.switchToWs().getClient();
const sessionCookie = client.handshake.headers.cookie
.split('; ')
.find((cookie: string) => cookie.startsWith('session'))
.split('=')[1];
const sessionId = cookieParser.signedCookie(
sessionCookie,
process.env.CryptoKey,
);
console.log('SESSION ID',sessionId);
Run Code Online (Sandbox Code Playgroud)
调用 cookieParse.signedCookie() 后,生成的 sessionId 仍然是签名的;
client.request.cookies 和signedCookies 均未定义。
会话 ID 在那里,并且 cookie 正在由浏览器发送,但我无法在网关中解析它。
我有同样的问题并找到了答案。您的代码很接近,但再次返回签名的 cookie 的原因cookieParser.signedCookie(...)
是因为 cookie 值中的某些字符被编码。因此它不会将该字符串检测为签名 cookie。
要解决此问题,您必须传递decodeURIComponent(sessionCookie)
给 cookieParser。
let client: Socket = context.switchToWs().getClient();
const sessionCookie = client.handshake.headers.cookie
.split('; ')
.find((cookie: string) => cookie.startsWith('session'))
.split('=')[1];
const sessionId = cookieParser.signedCookie(
decodeURIComponent(sessionCookie),
process.env.CryptoKey,
);
console.log('SESSION ID',sessionId);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4500 次 |
最近记录: |