Search code examples
node.jsmongoosepassport.jspassport-localpassport-jwt

passport local not working for multiple model


I have used passport local for authenticate purpose but not working.It is working only one from these two(user and admin).I do not know why it is working like this.If anyone know please help to find solution.

passportconfig.js:

 const passportuser = require('passport');
 const localStrategyuser = require('passport-local').Strategy;
 const mongooseuser = require('mongoose'); 

 const passportAdmin = require('passport');
 const localStrategyAdmin = require('passport-local').Strategy; 
 const mongooseadmin = require('mongoose');

 var User = mongooseuser.model('User'); 
 var Admin = mongooseadmin .model('Admin'); 

 passportuser.use(
 new localStrategyuser({ usernameField: 'email' },
    (username, password, done) => {
        User.findOne({ email: username },
            (err, user) => {
                if (err) { return done(err); } else if (!user) {

                    return done(null, false, { message: 'Email is not registered for User' });
                } else if (!user.verifyPassword(password)) {
                    return done(null, false, { message: 'Wrong password.' });
                } else {
                    return done(null, user);
                }
            });
    })
    );



passportAdmin.use(
new localStrategyAdmin({ usernameField: 'email' },
    (username, password, done) => {
        Admin.findOne({ email: username },
            (err, admin) => {
                if (err)
                    return done(err);
                // unknown user
                else if (!admin)
                    return done(null, false, { message: 'Email is not registered for Admin' });
                // wrong password
                else if (!admin.verifyPassword(password))
                    return done(null, false, { message: 'Wrong password.' });
                // authentication succeeded
                else
                    return done(null, admin);
            });
    })
    );

Solution

  • Like @Panther mentioned in the comment, passportuser and passportAdmin is just the same module, you have to create separate Passport instances instead of using the default one

    const { Passport } = require('passport');
    
    const passportuser = new Passport();
    const passportAdmin = new Passport();
    

    And also as @Panther mentioned, there is no need to require('mongoose') multiple times. This would work equally well:

    const mongoose = require('mongoose');
    const User = mongoose.model('User'); 
    const Admin = mongoose.model('Admin');