0

我已使用本地护照进行身份验证但无法正常工作。它只能从这两个(用户和管理员)中工作一个。我不知道为什么它会这样工作。如果有人知道,请帮助找到解决方案。

护照配置.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);
            });
    })
    );
4

1 回答 1

1

就像评论中提到的@Panther ,passportuser并且passportAdmin只是同一个模块,您必须创建单独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');
于 2020-06-13T17:20:52.277 回答