簡體   English   中英

Express-session 存儲不返回帶有自定義數據的完整 session object

[英]Express-session store is not returning the full session object with custom data

我已經研究這個問題一段時間了,但我很困惑。

我正在使用express-sessionconnect-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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM