如何序列化/反序列化多个本地策略

我如何序列化/反序列化多个本地策略:我已经尝试过使用PassportJS中的多个本地策略,但不成功。

这是我的代码:

passport.use('user', new LocalStrategy( function(username, password, done) { UserSchema.findOne({ username: username }, function(err, user) { // ... return done(null, user); }); })); passport.use('admin', new LocalStrategy( function(username, password, done) { adminSchema.findOne({ username: username }, function(err, user) { // ... return done(null, user); }); })); passport.serializeUser(function(user, done){ done(null, user.id); }); passport.deserializeUser(function(id, done){ adminSchema.findById(id, function(err, user){ if(err) done(err); if(user){ done(null, user); } else { user.findById(id, function(err, user){ if(err) done(err); done(null, user); }) } }); 

我正在研究同样的问题。 我把你的代码和改变了一些东西,它为我工作! 确保在尝试其他帐户之前注销一个帐户,或只使用隐身标签。

这里是我使用的更新的代码:

 passport.use('user', new LocalStrategy( function(username, password, done) { UserSchema.findOne({ username: username }, function(err, user) { // ... return done(null, user); }); })); passport.use('admin', new LocalStrategy( function(username, password, done) { adminSchema.findOne({ username: username }, function(err, user) { // ... return done(null, user); }); })); passport.serializeUser(function(user, done){ done(null, user.id); }); passport.deserializeUser(function(id, done){ adminSchema.findById(id, function(err, user){ if(err) done(err); if(user){ done(null, user); } else { UserSchema.findById(id, function(err, user){ if(err) done(err); done(null, user); }) } }); 

我的模式名称是不同的,所以我改变它们以匹配你的。 你可能有一个问题是使用UserSchema而不是userSchema。 尝试下一个,如果它不工作。

希望这可以帮助!