我的guard包含以下代码:
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正在由浏览器发送,但我无法在网关中解析它。
2条答案
按热度按时间vkc1a9a21#
我遇到了同样的问题,并找到了答案。您的代码很接近,但
cookieParser.signedCookie(...)
再次返回签名的cookie的原因是cookie值中的一些字符被编码,因此它不会将字符串检测为签名的cookie。要解决这个问题,您必须将
decodeURIComponent(sessionCookie)
传递给cookieParser。up9lanfz2#
除此之外:
由于存在可能性,因此需要可选链接(
.?
)。