使用Express和Passport JSredirect节点中的路由
比方说,我有一个路由定义使用快速路由器来呈现付款方式:
router.get('/payment', (req, res) => { if (req.user) { res.render('payment', { user: req.user }); } else { res.redirect('/login'); } });
如果我没有login,那么我应该被带到login页面,当我login时,我想被redirect到付款表单。
我的login会话是使用Passport构build的。 以下是我的POSTlogin路线的样子:
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); });
一旦成功,我会重新回到上一页,但是这会将我带到主页,这是有道理的。 我不确定login成功,我如何将用户redirect到付款表格。
有几种方法可以做到这一点。 基本的想法是存储您想要用户redirect到的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'
req.session.returnURL || 'back'
确定returnURL
是否存在returnURL
,将使用'back'
来代替。
- 需要为使用nodejs / express编写的现有应用程序创buildapi文档
- 如何组织由express / koa后端服务的webpacked vue.js应用程序?
- 如何从Node服务器获取请求pathvariables值到AngularJS控制器
- 包含模板,部分模板和/或块模板之间的区别是什么? EJS / ejs-当地人
- 如何在AfterCreate中访问请求对象 – waterline,sails
- Node.js,express.js&hogan.js:部分在第二次刷新后无法正确加载
- Node.js Express应用程序中出现Jade(1.0+)模板错误:“不允许使用重复键”id“。
- 带有Typescript的NodeJS的REST客户端
- 错误:ENOENT重命名节点/快递应用程序中的文件