【发布时间】:2020-05-06 08:39:51
【问题描述】:
我需要使用 Passportjs 实现两个 LOCAL 策略,它们可能必须同时可用。
这是场景:假设我有一个用户和一个房间,每个房间都有用于身份验证的名称和密码。显然,我可以使用不同的名称(例如“用户本地”和“房间本地”)定义两个单独的本地策略,并在成功的名称和密码验证时返回相应的对象 -user 或 room。
我还可以区分 serializeUser / deserializeUser 方法中的对象类型。
我遇到的问题是req.login 方法在每次成功验证后填充一个且只有一个变量 - req.user。
因此,如果我以用户身份成功进行身份验证,req.user 将持有我的User 对象。如果稍后我以房间身份进行身份验证,则相同的 req.user 现在已填充有 Room 对象,覆盖之前的 User 对象。这给我带来了麻烦,因为我需要通过req.user 访问两个对象的特定对象方法和字段(当两个身份验证都成功完成时)。
req.isAuthenticated 方法也是如此 - 它将根据最后一个身份验证结果返回 true / false,覆盖前一个。
我该怎么做?
【问题讨论】:
-
这对我有帮助 github.com/jaredhanson/passport/issues/287 只需要设置多个本地策略并在您的路线中使用适当的策略。
标签: node.js express passport.js