moa*_*lee 7 session express passport.js
默认情况下,Passport允许同一用户从多个浏览器登录并创建唯一会话.如何在用户尝试创建第二个会话时将其配置为销毁第一个会话?
目前我正在使用"会话"模型将用户名添加到记录中,并在后续登录时按用户名检查会话是否存在.但这会增加数据库的流量.我想快递必须已经或已经做到,将"登录用户"信息保存在内存中,以便简化流程.我会感谢有关如何为此目的实现调整或任何其他解决方法/建议的想法.非常感谢!
我看到至少有 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'))
Run Code Online (Sandbox Code Playgroud)
不需要设置或配置。
它是如何运作的?
该策略创建了一个包含序列化用户对象和 sessionID 的数组。
每次用户登录时,该策略都会检查用户是否已经登录。如果是,则标记另一个会话。下次另一个会话中的用户发出请求时,策略会看到该标志,并将用户注销。
我认为 Express 必须已经这样做或已经这样做了,将“登录用户”信息保留在内存中,以便简化流程。
我相信该session模型会登录用户,并仅将登录信息保存在会话 cookie 中。服务器本身不知道谁登录了,只是在浏览器提供的(签名的)会话 cookie 中检查此状态。
您可以编写自己的 Passport.js 策略来以不同的方式处理它。