【问题标题】:passport local not working for multiple model本地护照不适用于多种型号
【发布时间】:2020-10-03 02:21:22
【问题描述】:

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

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

【问题讨论】:

  • 您的代码显示它只会对来自两个表 useradmin 的用户进行身份验证,所以你试图解释的内容不清楚..
  • 另外,passportuserpassportadmin 仅在您需要相同的 passport 时相同。所以一个基本上你有一本护照和同一个护照的两个本地策略。所以结合这些逻辑会很好。 Requiring将护照或芒果分成两个差异变量不会使它们不同。它们是存储在差异变量中的相同实例。
  • 我从这里得到了这个代码:github.com/CodAffection/…
  • 我将这个用于用户和管理部分..所以我不知道如何使用它/
  • 我不知道如何将它用于用户部分和管理部分

标签: node.js mongoose passport.js passport-local passport-jwt


【解决方案1】:

就像评论中的@Panther mentionedpassportuserpassportAdmin 只是同一个模块,您必须创建单独的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');

【讨论】:

  • 工作完美..非常感谢:)
  • 你知道打字稿吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-25
  • 1970-01-01
  • 2018-06-04
  • 2016-01-07
  • 2019-05-27
  • 2019-06-23
  • 1970-01-01
相关资源
最近更新 更多