【问题标题】:How to serialize/deserialize multiple local strategie如何序列化/反序列化多个本地策略
【发布时间】:2015-01-08 00:46:24
【问题描述】:

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

【问题讨论】:

    标签: node.js passport.js


    【解决方案1】:

    我正在解决同样的问题。我拿了你的代码并改变了一些东西,它对我有用!请务必先退出一个帐户,然后再尝试另一个帐户,或者只使用隐身标签。

    这是我使用的更新代码:

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

    希望这会有所帮助!

    【讨论】:

    • 有没有用户不需要注销?我正在谈论一个实时可扩展的应用程序。哪里说多个管理员和用户可以登录。
    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2011-05-20
    • 2014-10-21
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多