gpt4 book ai didi

javascript - 使用 Express 和 Passport JS 在 Node 中重定向路由

转载 作者:太空宇宙 更新时间:2023-11-04 00:29:11 24 4
gpt4 key购买 nike

假设我有一个使用 Express Router 定义的路由来呈现付款表单:

router.get('/payment', (req, res) => {
if (req.user) {
res.render('payment', { user: req.user });
} else {
res.redirect('/login');
}
});

如果我没有登录,那么我应该被带到登录页面,当我登录时,我想重定向回付款表单。

我的登录 session 是使用 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 本身中,也可以使用 session 。

这就是整个想法。

例如,使用 session :

router.get('/payment', (req, res) => {
if (req.user) {
res.render('payment', { user: req.user });
} else {
req.session.returnURL = '/payment';
res.redirect('/login');
}
});

然后在您的 /login route :

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' 确保如果 session 中不存在 returnURL,则将使用 'back'

关于javascript - 使用 Express 和 Passport JS 在 Node 中重定向路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41674870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com