默认情况下,Passport允许同一用户从多个浏览器登录并创建唯一会话。如何在用户尝试创建第二个会话时将其配置为销毁第一个会话?
目前,我正在使用“会话”模式将用户名添加到记录中,并在后续登录时按用户名检查会话是否存在。但这会增加数据库的流量。我想快递必须已经或已经做到,将“登录用户”信息保存在内存中,以便简化流程。我会感谢有关如何为此目的实现调整或任何其他解决方法/建议的想法。 非常感谢!
答案 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策略,以区别对待它。