[英]Express-session store is not returning the full session object with custom data
我已經研究這個問題一段時間了,但我很困惑。
我正在使用express-session
和connect-redis
作為會話的存儲。 我正在使用 typescript。
我將它添加到我的服務器文件的頂部,並且我能夠在沒有任何 typescript 錯誤的情況下訪問這些字段。
declare module "express-session" {
interface SessionData {
userId: string;
role: UserRole;
}
}
當我登錄用戶時,我設置了額外的 SessionData 字段。
request.session.userId = user._id.toHexString();
request.session.role = user.role;
console.log(request.session);
通過 Postman,我可以看到 cookie 已設置並返回。 此外,我檢查了 Redis 中的 session 密鑰,session是正確的。 例如
{\"cookie\":{\"originalMaxAge\":604800000,\"expires\":\"2023-01-23T17:34:05.158Z\",\"secure\":true,\"httpOnly\":true,\"path\":\"/\"},\"userId\":\"1234\",\"role\":\"userRole\"}
但是,在調用 session 中間件后,我添加到 SessionData 的額外字段沒有被填充。 而不是得到:
Session {
cookie: {
path: '/',
_expires: 2023-01-23T17:52:49.153Z,
originalMaxAge: 604800000,
httpOnly: true,
secure: true
},
userId: '1234',
role: 'userRole'
}
我得到:
Session {
cookie: {
path: '/',
_expires: 2023-01-23T17:52:52.339Z,
originalMaxAge: 604800000,
httpOnly: true,
secure: true
}
}
這就是我調用 session 中間件的方式:
const sessionOptions: SessionOptions = {
secret: "secret key",
resave: true,
saveUninitialized: true,
cookie: { secure: true, httpOnly: true },
store: store,
};
app.use(session(sessionOptions));
我認為這可能是 redis 的問題,但鍵/值被保留了下來。 我想這可能是 connect-redis 的問題,所以我使用了默認的 MemoryStore,但這也不起作用。
任何幫助,將不勝感激!
當然,在我問了這個問題之后,我就知道答案是什么了……
首先,不要在響應中手動設置 session id 的 cookie。 它會自動為您完成。
其次,確保 secure 在本地主機上為FALSE 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.