【问题标题】:How to initialize and use passport for different kinds of users?如何为不同类型的用户初始化和使用护照?
【发布时间】:2020-04-20 22:50:43
【问题描述】:

我不知道怎么问这个问题,所以看起来有点荒谬!

我正在使用 Node 和 Express(中间件)开发应用程序。我还使用 Passport (Local) 进行身份验证。 关于我的应用程序的业务,我需要管理两种用户。

定义

应用用户:使用应用的人。

管理员:管理应用程序内容的人。

现在,我使用护照(本地)来验证应用程序用户。因此,我在“app”中调用了我的护照设置。当前设置知道应用程序用户的表并且工作正常。但是,对于管理员来说,还有另一个需要查询的集合。 问题:如何使用护照设置两个不同的集合?让我给你看一些代码来说明这种情况。

app.js

const port = process.env.PORT || 5000;
var passport = require('passport');
var setupPassport = require('./setup-passport');
//Some code here and then
setupPassport();

设置护照

module.exports = function () {  

    passport.serializeUser(function (user, done) {       

        done(null, user._id);
    });

    passport.deserializeUser(function(id,done){

        User.findById(id,function(err,user){            

            done(err,user);
        });
    });
};
//And 

passport.use('login',new localStrategy(function(username,password,done){



    User.findOne({userName:username},function(err,user){

        if(err){         

            return done(err);
        }

        if(!user){           

            return done(null,false,{message:'The username has not been found!'});
        }

        user.checkPassword(password,function(err,isMatch){
        //...

如您所见,已为应用程序用户设置了配置。如果我想为管理员设置另一个集合怎么办?有没有针对不同收藏设置护照的解决方案?两个用户将同时使用同一个应用程序,因此都可以登录和注销。

一个可能但丑陋的解决方案

我一直在考虑将所有用户信息放在一个集合中,但我确信这不太好!

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    也许您可以将字段添加到接受布尔值的架构中。像

    admin:{
    type: Boolean,
    default: false
    }
    

    因此,如果一个人注册为管理员,则该值将为 true,否则将为 false。

    每次登录用户时,可以在User.findOne()查询函数下放一条if语句,检查admin字段是否设置为true,从而判断用户类型。

    此外,您应该在 MongoDB 中使用世界集合而不是表。这是一个 NoSQL 数据库。

    【讨论】:

    • 感谢您对集合和表格之间的区别提出建设性意见。我已经习惯了收藏!但是,解决方案并不有趣。添加一个标志来区分不同类型的用户似乎并不明智!但是,我正在考虑创建一个层次结构。如果我能将这些集合分开,那就太好了。
    • 创建 2 个单独的集合也可以。只是每次您都必须检查两者。
    猜你喜欢
    • 1970-01-01
    • 2018-11-30
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 2017-05-05
    • 2013-09-22
    • 2016-11-12
    相关资源
    最近更新 更多