Проверьте несколько ролей перед входом - PullRequest
0 голосов
/ 11 июля 2019

У меня есть 3 роли пользователя: гость, участник и администратор.Я хочу дать разрешение только для пользователя и администратора для входа в систему.здесь мой код:

//user role middleware
var needsGroup = function(group) {
return [
passport.authenticate('local'),
  (req, res, next) => {
    if (req.user && req.user.role === group)
      next();
    else {
    req.flash('error_msg', 'please subscribe before login');
    res.redirect('/users/login');
    }
  }
]  
};


// Login 
router.post('/login', needsGroup('member', 'admin'), (req, res, next) => {
passport.authenticate('local', {
    successRedirect: '/dashboard',
    failureRedirect: '/users/login',
    failureFlash: true
})(req, res, next);
});

, поэтому моя проблема здесь, только одна из этих ролей может войти.пользователь с ролью администратора не может войти, а член может войти.любая помощь?

спасибо

1 Ответ

0 голосов
/ 12 июля 2019

Для вашей переменной промежуточного программного обеспечения вы берете только один параметр group, где вы предоставляете два в своем вызове needsGroup('member', 'admin').Решением было бы сделать этот параметр массивом, чтобы впоследствии можно было обновлять группы без обновления функции.

//user role middleware
var needsGroup = function(groups) {
return [
passport.authenticate('local'),
  (req, res, next) => {
    if (req.user && groups.indexOf(req.user.role) !== -1)
      next();
    else {
    req.flash('error_msg', 'please subscribe before login');
    res.redirect('/users/login');
    }
  }
]  
};


// Login 
router.post('/login', needsGroup(['member', 'admin']), (req, res, next) => {
passport.authenticate('local', {
    successRedirect: '/dashboard',
    failureRedirect: '/users/login',
    failureFlash: true
})(req, res, next);
});

Код groups.indexOf(req.user.role) !== -1 просто проверяет, существует ли роль пользователя в переданном массиве (['member', 'admin'])

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