我正在try 对PassportJS使用多种本地策略.我不想使用local、facebook和gmail等.

推荐答案

我认为这是不可能的,因为据我所知,当第一个策略失败时,你需要某种方法将请求"传递"给第二个策略,我认为这是不可能的.

但您可能可以使用一种本地策略,并try 使用这两种方法对传入数据进行身份验证.

作为一个简单的示例(使用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'));
    });
  }); 
}));

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

Node.js相关问答推荐

promise 所有映射或反对

如何使用jq将依赖项添加到package.json中

NodeJS缓冲区大小逻辑:为什么默认是8KB,而不仅仅是数据大小?

无法从ejs Web应用程序中的正文中提取数据

购物车是空的状态|本地存储不更新产品数量|Redux|

如何使用Nextjs路由从下一步/导航在新选项卡中通过";router.ush";打开链接

如何使用NodeJS在mongodb中更新文档

仅在一次查询中 MongoDB 上最近的一对位置

Redis Typescript 删除方法类型转换

SvelteKit应用程序立即退出,没有错误

nyc 代码覆盖不适用于 NodeJs Express 服务器

express app.post的多个参数在Node.js中的定义是什么

如何使用对象中的常量值验证字符串字段?

处理 UTC 日期和future

Express.js - 监听请求中止

部署云功能 Firebase/Stripe 时出错

fs.writefile 选项参数的可能值,尤其是只读文件的整数

AWS Kinesis 中的分区键是什么?

代理后面的凉亭

从 JavaScript 文件或 REPL 中 require()'ing CoffeeScript 文件