Переадресация паспортного входа на основе поиска MongoDB - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть маршрут входа в систему router.post('/login', authController.login). Мой контроллер использует паспорт и выглядит так:

exports.login = passport.authenticate('local', {
  failureRedirect: '/login',
  failureFlash: 'Failed Login',
  successRedirect: '/',
  successFlash: 'You are now logged in'
});

Это нормально работает, но я хочу перенаправить на /store, если у пользователя нет устройства, и /device, если оно есть, на основании запроса:

const devices = await Device.find({ owner: req.user._id });

Каков наилучший способ сделать это? Я попробовал:

router.post('/login', authController.login, deviceController.hasDevice);

exports.login = (req, res, next) => {
  passport.authenticate('local', {
    failureRedirect: '/login',
    failureFlash: 'Failed Login'
 });
 next();
};

exports.hasDevice = async (req, res) => {
  const devices = await Device.find({ owner: req.user._id });
  if (!devices.length) {
    res.render('store', { title: 'Store' });
  } else {
    res.render('devices', { title: 'My Devices', devices });
  }
};

но на req нет пользовательского объекта, когда я добираюсь до hasDevice. То есть Я получаю сообщение "не могу найти _ид неопределенного".

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

То, что я пытался сделать, было решено просто с помощью перенаправлений вроде:

router.get('/', someController.findRoute));

exports.findRoute= async (req, res) => {
  const devices = await Device.find({ owner: req.user._id });
  if (!devices.length) {
    res.redirect('/store');
  } else {
    res.redirect('/devices');
  }
};
0 голосов
/ 20 ноября 2018

Этого можно добиться, используя Пользовательский обратный вызов в passport.authenticate().

router.post('/login', async function(req, res, next) {
    passport.authenticate('local', function(err, user, info) {
        if (err || !user) {
            return res.redirect('/login');
        }

        const devices = await Device.find({ owner: user._id });

        if (!devices.length) {
            res.render('store', { title: 'Store' });
        } else {
            res.render('devices', { title: 'My Devices', devices });
        }
    })(req, res, next);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...