2

How can I serialize/deserialize multiple local strategies: I have already tried this Use multiple local strategies in PassportJS but not success.

This is my code :

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);
       })
   }
});
Community
  • 1
  • 1
Léon Jiresse
  • 621
  • 9
  • 18

1 Answers1

3

I was working on the same problem. I took your code and changed a few things and it worked for me! Make sure to log out of one account before trying another or just use an incognito tab.

Here is the updated code I used:

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);
       })
   }
});

My schema names are different so I changed them to match yours. One issue you might have is using UserSchema instead of userSchema. Try that next if it doesn't work.

Hope this helps!

  • Is there anyway the User need not Logout? Am talking about a real time scalable application. Where say multiple admins and users are able to login. – godimedia Feb 20 '15 at 09:35