我需要使用Passportjs实现两个LOCAL策略,这些策略可能必须同时可用。
以下是场景:假设我有一个用户和一个房间,每个房间都有用于身份验证的名称和密码。显然,我可以定义两个具有不同名称的独立本地策略(例如'用户本地'和#39;房间本地')以及成功的名称和密码验证以返回相应的对象 - {{1 }或user
。
我还可以区分room
/ serializeUser
方法中的对象类型。
我遇到的问题是deserializeUser
方法在每次成功验证后填充一个和一个变量 - req.login
。
因此,如果我作为用户成功进行身份验证,则req.user
会保留我的req.user
对象。如果稍后我作为房间进行身份验证,则现在已使用User
对象填充了相同的req.user
,从而覆盖了之前的Room
对象。这给我带来麻烦,因为我需要访问特定的对象方法&两个对象通过User
的字段(当两个身份验证成功完成时)。
req.user
方法也是如此 - 它将根据上次验证结果返回req.isAuthenticated
/ true
,覆盖前一个验证结果。
我怎样才能做我需要的事?
答案 0 :(得分:0)
如果用户能够立即使用房间凭证登录而无需先与用户进行登录,那么您将拥有2个可以在以后聚合的身份验证逻辑。我再次登录之前将其存储在会话中,或者实施新的身份验证系统,将用户/房间信息存储在不同的req
变量中。
Passportjs可帮助您处理具有多种不同策略类型的单用户身份验证逻辑,让每个会话使用一个用户(建议使用会话)。