我没有登录页面,而是每个页面都有一个登录表单.我想将用户重定向回他们所在的同一页面,无论身份验证是否成功(使用适当的Flash消息)
请使用以下代码:
app.post('/login', validateLogin, passport.authenticate('local-login'), function(req, res) {
var redirectUrl = '/';
if(req.body.to.length > 0){
redirectUrl = req.body.to;
}
console.log("THIS IS ONLY CALLED IF passport.authenticate() IS SUCCESSFUL");
res.redirect(redirectUrl);
});
Run Code Online (Sandbox Code Playgroud)
如果传递身份验证,我只会看到上面的最终中间件被调用.如果失败,那么护照似乎是以get请求的形式将我重定向到/ login.在我的应用程序中,此页面不存在.
如果我在护照验证功能中将其他选项对象作为参数传递,则此方法有效:
app.post('/login', validateLogin, passport.authenticate('local-login', {
successRedirect : '/', // redirect to the secure profile section
failureRedirect : '/signup', // redirect back to the signup page. THIS IS JUST FOR TESTING TO SEE IF THE REDIRECT ON FAIL WORKS.
failureFlash : true, // allow flash messages
}
));
Run Code Online (Sandbox Code Playgroud)
但在这样做时,我失去了选择将用户重定向到何处的能力.如果身份验证失败,护照似乎可以控制用户重定向到的位置.我怎样才能解决这个问题?或者这是一个错误?如果身份验证失败,必须护照身份验证是链中的最后一个中间件吗?
这是我的本地策略函数调用: …