用户登录后,我正在尝试将其重定向到登录前的同一页面。
示例:如果用户在点击登录链接之前在主页上,如果他成功登录,我想将他发回主页。(对于每个页面用户都可以这样做在他来到登录页面之前)
代码看起来应该是这样的:
router.post("/login", passport.authenticate("local",
{
successRedirect: "two pages back",
failureRedirect: "/login"
}), (req, res)=> {
if(err){
console.log(err);
return res.redirect("/login");
}
});
我试过这个:
successRedirect: "back"
但它会将用户重定向回登录页面。
感谢您的帮助,我正在使用express.js / node.js /passport.js!
答案 0 :(得分:1)
解决此问题的一种方法是在用户点击登录链接时存储用户的当前页面。您可以通过多种方式实现此目的,但最简单的方法可能是使用referer
对象的req.headers
属性。
所以在你的问题的背景下,这样的事情应该有效:
router.post("/login", passport.authenticate("local",
{
successRedirect: req.headers.referer, //should redirect to page prior to login
failureRedirect: "/login"
}), (req, res)=> {
if(err){
console.log(err);
return res.redirect("/login");
}
});
答案 1 :(得分:1)
我弄明白该怎么做。
首先,当对登录页面发出GET请求时,您需要存储用户的当前页面(req.headers.referer)并在呈现登录视图时将其发回。
router.get("/login", (req, res)=> {
res.render("login", {referer:req.headers.referer});
});
之后,在您的登录表单中,您需要将referer作为隐藏输入的值。 (我在这里使用ejs模板)
<input type="hidden" name="referer" value= <%= referer %> >
最后,如果登录失败(failureRedirect),请将用户重定向到&#34; / login&#34;路径。
否则,如果用户在登录页面(存储在req.body.referer)之前的页面不是未定义而不是登录页面本身,则将用户重定向到此页面页;存储在req.body.referer中。
否则,将用户重定向到主页或您想要的任何页面。
router.post("/login", passport.authenticate("local", {failureRedirect: "/login"}), (req, res) => {
if (req.body.referer && (req.body.referer !== undefined && req.body.referer.slice(-6) !== "/login")) {
res.redirect(req.body.referer);
} else {
res.redirect("/");
}
});