Javascript 使用Express和Passport JS重定向节点中的路由
假设我有一个使用Express Router定义的路由,用于呈现付款表单:Javascript 使用Express和Passport JS重定向节点中的路由,javascript,node.js,express,url-routing,passport.js,Javascript,Node.js,Express,Url Routing,Passport.js,假设我有一个使用Express Router定义的路由,用于呈现付款表单: router.get('/payment', (req, res) => { if (req.user) { res.render('payment', { user: req.user }); } else { res.redirect('/login'); } }); 如果我没有登录,那么我应该被带到登录页面,当我登录时,我希望被重定向回付款表单 我的登录会话是使用Passport
router.get('/payment', (req, res) => {
if (req.user) {
res.render('payment', { user: req.user });
} else {
res.redirect('/login');
}
});
如果我没有登录,那么我应该被带到登录页面,当我登录时,我希望被重定向回付款表单
我的登录会话是使用Passport构建的。以下是我的登录后路径的外观:
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”
。我很高兴它有帮助:)