【问题标题】:PassportJS - using multiple local strategies simultaneouslyPassportJS - 同时使用多个本地策略
【发布时间】:2020-05-06 08:39:51
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

标签: node.js express passport.js


【解决方案1】:

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

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

【讨论】:

  • 如果 PassportJS 无法实现所需的身份验证逻辑,是否可以 - 任何其他能够做到这一点的替代方案?
  • 我不这么认为,您的场景非常具体。 Passportjs 用于用户 + 密码身份验证(本地策略)的逻辑非常简单,看看那个 =) 并可能实现你自己的。 “没有人有时间做那个!” - 将其存储在会话中:)
猜你喜欢
  • 2013-12-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-21
相关资源
最近更新 更多