Express.js + Passport.js:如何限制同一用户的多次登录?

时间:2015-03-19 12:39:13

标签: session express passport.js

默认情况下,Passport允许同一用户从多个浏览器登录并创建唯一会话。如何在用户尝试创建第二个会话时将其配置为销毁第一个会话?

目前,我正在使用“会话”模式将用户名添加到记录中,并在后续登录时按用户名检查会话是否存在。但这会增加数据库的流量。我想快递必须已经或已经做到,将“登录用户”信息保存在内存中,以便简化流程。我会感谢有关如何为此目的实现调整或任何其他解决方法/建议的想法。 非常感谢!

2 个答案:

答案 0 :(得分:2)

我看到至少有4个用户提出了这个问题,所以我决定为此创建passport-strategy。新战略名为passport-one-session-per-user。这是您可以在此处访问的开源策略:https://github.com/AminaG/passport-one-session-per-user

如何使用它?在session之后立即添加。例如:

app.use(passport.session())
var passportOneSessionPerUser=require('passport-one-session-per-user')
passport.use(new passportOneSessionPerUser())
app.use(passport.authenticate('passport-one-session-per-user'))

不需要设置或配置。

它是如何运作的?

该策略创建了一个包含serializaed用户对象和sessionID的数组。

每次用户登录时,策略都会检查用户是否已登录。如果是,则标记另一个会话。下一次会话中的用户发出请求时,策略会看到该标志,并将用户注销。

答案 1 :(得分:0)

  

我认为快递必须已经或已经做过,将“登录用户”信息保存在内存中,以便简化流程。

我相信session模型会记录用户,并仅在会话cookie中保存已记录的内容。服务器本身不知道谁登录,但只是在浏览器提供的(签名)会话cookie中检查此状态。

您可以编写自己的Passport.js策略,以区别对待它。