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

Posted

技术标签:

【中文标题】本地护照不适用于多种型号【英文标题】: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/… 我将这个用于用户和管理部分..所以我不知道如何使用它/ 我不知道如何将它用于用户部分和管理部分 【参考方案1】:

就像评论中的@Panther mentioned,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');

【讨论】:

工作完美..非常感谢:) 你知道打字稿吗?

以上是关于本地护照不适用于多种型号的主要内容,如果未能解决你的问题,请参考以下文章

核心数据警告:“版本哈希信息不适用于所有型号”

Firebase 存储上传图像不适用于亚马逊火灾(型号:Fire 7)

护照身份验证不适用于 nodejs 和 mysql

JsonConverter 不适用于模型绑定

Firebase Firestore iOS 多种型号

护照身份验证不适用于使用快速路由器的特定路由