当前位置: 首页 > 面试题库 >

在PassportJS中使用多种本地策略

哈宪
2023-03-14
问题内容

我正在尝试对PassportJS使用多种本地策略。我不尝试使用本地,facebook和gmail等。我将两组用户存储在单独的对象中,并且我想使用本地策略对两者进行身份验证。就目前而言,我不能对两者使用相同的本地策略,因为它们具有不同的对象属性,这使我查询不同的对象。有什么办法吗?或对此的任何建议将不胜感激。


问题答案:

我认为这是不可能的,因为据我所知,您需要一种在第一个策略失败时将请求“移交给”第二个策略的方法,而且我认为这是不可能的。

但是您可能可以使用一种本地策略,并且仅尝试使用这两种方法对传入的数据进行身份验证。

作为一个简单的示例(使用Mongoose作为示例数据库):

passport.use(new LocalStrategy(function(username, password, done) {
  Model1.findOne({ username : username }, function(err, user) {
    // first method succeeded?
    if (!err && user && passwordMatches(...)) {
      return done(null, user);
    }
    // no, try second method:
    Model2.findOne({ name : username }, function(err, user) {
      // second method succeeded?
      if (! err && user && passwordMatches(...)) {
        return done(null, user);
      }
      // fail! 
      done(new Error('invalid user or password'));
    });
  }); 
}));

对于序列化/反序列化,您可能需要在user传递给的对象中存储一些属性,done以表示反序列化用户所需的模型。



 类似资料:
  • 问题内容: 我使用passportJS,我想提供的不仅仅是更多的和我的身份验证策略(护照本地)。 我有3个表单字段:,,和 我如何从本地策略访问,该策略如下所示: 我在我的路由(而不是路由中间件)中称呼它,像这样: 问题答案: 您可以启用一个选项,如下所示: 何时,set 成为verify回调的第一个参数,您可以根据需要对其进行检查。

  • 本地策略可以配置一些用户相关的权限,比如连接超时设置。V2Ray 处理的每一个连接,都对应到一个用户,按照这个用户的等级(level)应用不同的策略。本地策略可按照等级的不同而变化。 PolicyObject PolicyObject对应配置文件中的policy项。 { "levels": { "0": { "handshake": 4, "connIdle":

  • Q 1>这里我应该使用哪种策略? 2>什么时候我们应该使用一种策略而不是另一种策略?

  • 由于现代魔法咒语越来越复杂,一个成功的项目往往需要以月来计算,深谙此道的魔导师们便被尊称为了人月神话 在这种环境下,精神力对于法师们来说,就显得十分宝贵与重要 说起精神力,其实在精灵国度发音为 WillPower,只不过传入天朝后,被不知情的麻瓜们硬译为 自控力 或 意志力 听起来十分神秘 + 高大上,其实只要抓住两个特性即可 电池 法师们利用精神力控制魔法元素 早晨 > 晚上 可利用 睡眠/冥想

  • 我真的不知道如何在Swift中声明变量,我有四个选项: 我只想声明一个float而不指定一个值,最好的方法是什么?

  • 问题内容: 我将使用带有一些数据的本地JSON文件。我的问题是,存储文件的最佳/正确方式在哪里?我应该如何访问它及其内容? 我之前通过http处理过json,但没有本地处理过。 问题答案: 有很多方法 您可以将JSON文件存储在资产文件夹中,并按如下方式读取它们-http://codingdict.com/questions/88307 对于基本的JSON解析,Android的内置JSONObje