可以说我有一个使用Express Router定义的用于呈现付款表格的路线:
router.get('/payment', (req, res) => {
if (req.user) {
res.render('payment', { user: req.user });
} else {
res.redirect('/login');
}
});
如果我尚未登录,则应进入登录页面,登录时,我想重定向回付款表。
我的登录会话是使用Passport构建的。这是我的POST登录路线的样子:
router.route('/login').post((req, res, next) => {
req.assert('email', 'Please sign up with a valid email.').isEmail();
req.assert('password', 'Password must be at least 4 characters long').len(4);
var errors = req.validationErrors();
if (errors) {
req.flash('errors', errors);
return res.redirect('/login');
}
passport.authenticate('login', {
successRedirect: 'back',
failureRedirect: '/login',
failureFlash : true
})(req, res, next);
});
成功后,我将重定向回上一页,但这将我带到首页,这很有意义。我不确定登录是否成功,如何将用户重定向到付款表单。
您可以通过几种方法来执行此操作。基本思想是存储您希望用户重定向到的URL。您可以通过GET
参数将其存储在URL本身中,也可以使用会话。
这就是整个想法。
例如,要使用会话:
router.get('/payment', (req, res) => {
if (req.user) {
res.render('payment', { user: req.user });
} else {
req.session.returnURL = '/payment';
res.redirect('/login');
}
});
然后在您的/login
路线中:
router.route('/login').post((req, res, next) => {
req.assert('email', 'Please sign up with a valid email.').isEmail();
req.assert('password', 'Password must be at least 4 characters long').len(4);
var errors = req.validationErrors();
if (errors) {
req.flash('errors', errors);
return res.redirect('/login');
}
passport.authenticate('login', {
successRedirect: req.session.returnURL || 'back',
failureRedirect: '/login',
failureFlash : true
})(req, res, next);
});
该行req.session.returnURL || 'back'
确保如果returnURL
会话中不存在,'back'
则将其代替。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句