【问题标题】:How to redirect 2 pages back with express.js / node.js如何使用 express.js / node.js 重定向 2 个页面
【发布时间】:2018-08-21 00:36:52
【问题描述】:

用户登录后,我试图将他重定向到登录前的同一页面。

示例:如果用户在单击登录链接之前就在主页上,如果他成功登录,我想将他送回主页。(并且对用户可能的每个页面都执行相同的操作在他来到登录页面之前打开)

代码应该是这样的:

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!

【问题讨论】:

    标签: node.js express passport.js


    【解决方案1】:

    我知道怎么做。

    首先,当对登录页面进行GET请求时,您需要存储用户当前页面(req.headers.referer)并在渲染登录视图时将其发送回来。

    router.get("/login", (req, res)=> {
        res.render("login", {referer:req.headers.referer});
    });
    

    之后,在您的登录表单中,您需要将引用者作为隐藏输入的值。 (我这里用的是ejs模板)

    <input type="hidden" name="referer" value= <%= referer %> >
    

    最后,如果出现登录失败(failureRedirect),将用户重定向到“/login”路径。

    否则,如果用户在进入登录页面之前的页面(存储在req.body.referer中)不是undefined并且不是登录页面本身,则将用户重定向到此页;存储在 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("/");
        }
    });
    

    【讨论】:

      【解决方案2】:

      解决此问题的一种方法是在用户单击登录链接时存储用户的当前页面。有多种方法可以实现这一点,但最简单的可能是使用 req.headers 对象的 referer 属性。

      所以在你的问题的背景下,这样的事情应该可以工作:

      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");
          }
      });
      

      【讨论】:

      • 此解决方案不起作用,因为 req 未定义。
      猜你喜欢
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多