重定向基于MongoDB的护照登录查找

问题描述 投票:0回答:2

我已经登录路线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。即我得到“无法找到的不确定_id。”

node.js mongodb express
2个回答
1
投票

您可以通过使用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);
});

0
投票

我试图做的是通过使用重定向像简单地加以解决:

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');
  }
};
© www.soinside.com 2019 - 2024. All rights reserved.