我已经登录路线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。”
您可以通过使用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);
});
我试图做的是通过使用重定向像简单地加以解决:
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');
}
};