Passport.js如何处理会话?

3
我理解您对于Web应用程序中会话概念的困惑。您正在运行使用Express 3.0的Node.js服务器。

要求:

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

  • 存储此会话并将其用于验证用户是否已经登录(防止两个设备同时使用同一用户)

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

Passport将会话存储在哪里?


如果您正在使用Express/Connect,Passport可以使用他们的session中间件。请查看http://passportjs.org/guide/configure/,特别是“Middleware”和“Sessions”。 - Jonathan Lonowski
@crzrcn:你好,我无法完全弄清楚如何防止用户在接受的答案中从两台机器登录。你能否请详细说明一下? - vivekanon
@mystikacid 我不再使用Passport,甚至都不记得我曾经问过这个问题。无论如何,您需要在某个地方存储用户的会话。您存储的会话值应该能够指示会话是否处于活动状态以及属于哪个用户。当您的应用程序接收到另一个映射到同一用户的会话创建操作时,您的应用程序应删除或停用所有其他同一用户的会话。至于Passport的特定用法,我无法帮助您。 - user810606
@crzrcn:没关系...逻辑还是有帮助的。谢谢! - vivekanon
1个回答

2

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

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

要使用passport持久化您的用户会话,请使用passport的中间件:

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()) 是做什么的呢?如果passport使用了express.session的话。 - user810606
我没有编写passport,但我猜测它允许passport利用express.session来维护状态。Express.session使用外部会话存储,以便您可以跨进程、机器和网络维护会话。 - hunterloftis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接