本地护照不适用于多种型号

passport local not working for multiple model

我已经使用本地护照进行身份验证,但 working.It 只能使用这两个(用户和管理员)中的一个。我不知道为什么它像 this.If 那样工作,有人知道吗帮助找到解决方案。

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

就像评论中的@Panther 一样,passportuserpassportAdmin只是同一个模块,你必须创建单独的Passport实例而不是使用默认实例一个

const { Passport } = require('passport');

const passportuser = new Passport();
const passportAdmin = new Passport();

而且正如@Panther 提到的,没有必要 require('mongoose') 多次。这同样有效:

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