PassportJS - 同时使用多个本地策略

时间:2014-09-18 05:43:05

标签: node.js express passport.js

我需要使用Passportjs实现两个LOCAL策略,这些策略可能必须同时可用。

以下是场景:假设我有一个用户和一个房间,每个房间都有用于身份验证的名称和密码。显然,我可以定义两个具有不同名称的独立本地策略(例如'用户本地'和#39;房间本地')以及成功的名称和密码验证以返回相应的对象 - {{1 }或user。 我还可以区分room / serializeUser方法中的对象类型。 我遇到的问题是deserializeUser方法在每次成功验证后填充一个和一个变量 - req.login。 因此,如果我作为用户成功进行身份验证,则req.user会保留我的req.user对象。如果稍后我作为房间进行身份验证,则现在已使用User对象填充了相同的req.user,从而覆盖了之前的Room对象。这给我带来麻烦,因为我需要访问特定的对象方法&两个对象通过User的字段(当两个身份验证成功完成时)。 req.user方法也是如此 - 它将根据上次验证结果返回req.isAuthenticated / true,覆盖前一个验证结果。

我怎样才能做我需要的事?

1 个答案:

答案 0 :(得分:0)

如果用户能够立即使用房间凭证登录而无需先与用户进行登录,那么您将拥有2个可以在以后聚合的身份验证逻辑。我再次登录之前将其存储在会话中,或者实施新的身份验证系统,将用户/房间信息存储在不同的req变量中。

Passportjs可帮助您处理具有多种不同策略类型的单用户身份验证逻辑,让每个会话使用一个用户(建议使用会话)。