我的守卫包含以下代码:
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);
在调用cookieParse.signedCookie();之后仍然对生成的sessionId进行签名。
client.request.cookies和signedCookies均未定义。
那里有会话ID,浏览器正在发送cookie,但是我无法在网关中解析它。
答案 0 :(得分:2)
我遇到了同样的问题并找到了答案。您的代码已结束,但是cookieParser.signedCookie(...)
再次返回签名的cookie的原因是因为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);