Léon Jiresse
Léon Jiresse

Reputation: 639

How to serialize/deserialize multiple local strategie

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

Upvotes: 2

Views: 1535

Answers (1)

Jordan Fabel
Jordan Fabel

Reputation: 41

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!

Upvotes: 3

Related Questions