【问题标题】:How does Passport.js handle sessions?Passport.js 如何处理会话?
【发布时间】:2023-03-07 14:23:01
【问题描述】:

我无法理解 Web 应用程序的会话概念。我正在使用 Express 3.0 运行 Node.js 服务器。

要求:

  • 为每个登录的用户创建一个会话

  • 存储此会话并使用它来验证用户是否已登录(防止两台设备同时使用同一用户)

  • 限制对某些页面的访问(通过将会话 ID 与其他一些数据相匹配)

护照存储会话在哪里?

【问题讨论】:

  • 如果您使用 Express/Connect,Passport 可以使用他们的session middleware。结帐passportjs.org/guide/configure,尤其是。 “中间件”和“会话”。
  • @crzrcn :嗨,我不太明白如何在接受的答案中阻止用户从两台机器登录。你能解释一下吗?
  • @mystikacid 我不再使用 Passport,我什至不记得我曾问过这个问题。无论如何,您希望在某处为您的用户存储会话。您存储的会话值应该能够指示会话是否处于活动状态,以及它属于哪个用户。当您的应用收到映射到同一用户的另一个会话创建操作时,您的应用应删除或停用同一用户的所有其他会话。至于 Passport 的具体用法,我帮不了你。
  • @crzrcn :没关系...逻辑仍然有帮助。谢谢!

标签: node.js session express passport.js


【解决方案1】:

它将用户会话(使用 express 或 connect)存储在 req.user

请记住,这与 express 会话中间件不同,后者可以在 req.session 中存储您想要的任何内容。

要使用护照保持您的用户会话,请使用护照的中间件:

app.use(express.session({ secret: 'keyboard cat' }));
app.use(passport.initialize());

然后像这样访问用户:

function someRoute(req, res, next) {
  // req.user = the user of this session
}

【讨论】:

  • 这行app.use(passport.session()) 做什么呢?如果护照使用 express.session 的。
  • 我没有写护照,但我猜它允许护照利用 express.session 来维护状态。 Express.session 使用外部会话存储,以便您可以跨进程、机器和网络维护会话。
猜你喜欢
  • 2013-08-29
  • 2013-02-12
  • 1970-01-01
  • 2019-08-20
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多