Как я могу реализовать аутентификацию пользователя на основе ролей с помощью Passport. js в Express. JS? - PullRequest
0 голосов
/ 10 июля 2020

Я создаю проект, используя Express. js и аутентификацию с помощью Passport. JS. Я могу выполнить аутентификацию пользователя для одного типа пользователя в Passport. JS. Однако я не могу выполнить эту аутентификацию для двух типов пользователей (обычных пользователей и администратора). Я попытался использовать объект ролей для сопоставления до того, как можно было вызвать настраиваемый маршрут, но не понимаю, как это сделать (плюс это не сработало). Буду признателен за помощь в решении этой проблемы. Это моя авторизация. js файл:

Моя авторизация. js файл:

module.exports = {
  ensureAuthenticated: function(req, res, next) {
    if (req.isAuthenticated()) {
      return next();
    }
    req.flash('error_msg', 'Please log in to view that resource');
    res.redirect('/users/login');
  },
  forwardAuthenticated: function(req, res, next) {
    if (!req.isAuthenticated()) {
      return next();
    }
     
    res.redirect('/dashboard');      
  }
};

Мой паспорт. JS файл:

const LocalStrategy = require('passport-local').Strategy;
const bcrypt = require('bcryptjs');

// Load User model
const User = require('../models/User');



module.exports = function(passport) {
  passport.use(
    new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
      // Match user
      User.findOne({
        email: email
      }).then(user => {
        if (!user) {
          return done(null, false, { message: 'That email is not registered' });
        }

        // Match password
        bcrypt.compare(password, user.password, (err, isMatch) => {
          if (err) throw err;
          if (isMatch) {
            return done(null, user);
          } else {
            return done(null, false, { message: 'Password incorrect' });
          }
        });
      });
    })
  );
  passport.serializeUser(function(user, done) {
    done(null, user.id);
  });
  passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
      done(err, user);
    });
  });
};

Ссылка на мой полный код: https://github.com/Temybroder/sealedapp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...