Как инициализировать и использовать паспорт для разных типов пользователей? - PullRequest
0 голосов
/ 20 апреля 2020

Я не совсем уверен, как задать этот вопрос, поэтому он может показаться немного абсурдным!

Я занимаюсь разработкой приложения с использованием Node и Express (middleware). Я также использовал 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();

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){
        //...

Как видите, конфигурация была установлена ​​для пользователей приложения. Что если я хочу установить другую коллекцию для администраторов? Есть ли решение по настройке паспорта для разных коллекций? Оба пользователя будут использовать одно и то же приложение одновременно, поэтому оба могут войти и выйти из системы.

Вероятное, но уродливое решение

Я думал о том, чтобы поместить информацию о всех пользователях в одну коллекцию, хотя я уверен, что это нехорошо!

1 Ответ

0 голосов
/ 20 апреля 2020

Может быть, вы можете добавить поле в схему, которая принимает логическое значение. Что-то вроде

admin:{
type: Boolean,
default: false
}

Так что, если человек зарегистрирован как администратор, значение будет истинным, в противном случае оно будет ложным.

Каждый раз, когда вы регистрируете пользователей, вы можете поместить оператор if в функцию запроса User.findOne(), чтобы проверить, установлено ли для поля admin значение true, и, следовательно, определить тип пользователей.

Кроме того, вы должны использовать коллекцию мира в MongoDB вместо таблицы. Это № SQL БД.

...