我正在尝试对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以表示反序列化用户所需的模型。
user
done