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

时间:2013-12-02 06:49:17

标签: node.js passport.js

如何序列化/反序列化多个本地策略:  我已经尝试了这个Use multiple local strategies in 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);
       })
   }
});

1 个答案:

答案 0 :(得分:2)

我正在研究同样的问题。我拿了你的代码并改变了一些东西,它对我有用!请务必先注销一个帐户,然后再尝试使用其他帐户。

以下是我使用的更新代码:

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。如果它不起作用,请尝试下一步。

希望这有帮助!