【问题标题】:res.redirect not working after the page is rendered with data使用数据呈现页面后 res.redirect 不起作用
【发布时间】:2013-07-16 09:05:54
【问题描述】:

我有一个简单的忘记密码功能,当用户请求更改密码时,他会收到一封带有令牌的电子邮件,点击它时他的电子邮件将被重定向到一个页面,该页面将接受他的新密码。

我所做的是,当我单击电子邮件中的链接时,服务器获取请求,并且一个函数从链接中取出数据用数据呈现页面(使用 res.render),然后它应该重定向到呈现的页面.

我面临的问题是,当我点击链接时,我正在获取数据和页面,但我不能让 res.redirect() 工作。

我的链接是这样的

http://localhost:3000/api/resetpassword?_csrf=ab8aa6a41567f817330e3e0a214725f8b2f88b487d5bef16f162e033c6a63dc41933511ddb79cb44ca049f472b3e0c593dbbaf&email=dummyEmail%2540dumyurl.ca

然后我使用 app.get() 在服务器上获取请求。

app.get('/api/resetpassword', Admin.resetPasswordPage);

我的渲染和重定向功能是这样的;

resetPasswordPage: function (req, res, next) {
    req.query.email = decodeURIComponent(req.query.email) ;
    res.render('resetPassword', {
        Email: req.query.email,
        Csrf : req.query._csrf,

    }, function (err, html) {
        console.log("TESTING HTML ", html);
        if (!err)
        res.redirect("/resetPassword");
    });
}

渲染成功,因为我在 html 参数中获得了页面的完整 HTML,但问题是如何重定向到该页面。该页面是在 EJS 中创建的,并且在 views 文件夹中。

【问题讨论】:

  • 所以当我从 URL 中删除 /api 时,它会将我正确重定向到页面,但网页不是加载器,浏览器中出现错误This web page has a redirect loop
  • 嗨 Suleman,我也在构建一个像你一样的忘记密码功能。你有 git 我可以参考吗?

标签: javascript node.js redirect express ejs


【解决方案1】:

听起来你想要这个流程:

  1. 用户点击链接到/api/resetpassword...
  2. express 运行resetPasswordPage 函数
  3. resetPasswordPage 回复重置密码表单 HTML 页面,根据查询参数预先填写
  4. 我认为此时您不喜欢浏览器地址栏中的 URL,这就是您认为需要重定向的原因。但是你需要那些查询字符串参数,如果你只重定向到/resetPassword,你就会丢失它们。因此,您要么必须使用 URL(我会推荐它,因为它是最简单的),要么依赖会话状态和会话 cookie。但是,使用 passwordResetOK=true 之类的标记会话可能会使您面临一大堆 CSRF 攻击,而 _csrf 查询字符串参数可以防止这些攻击。
  5. 这里不需要任何重定向,浏览器有表单。下一步是让用户填写表格并使用<form method="post" action="/resetPassword"> 提交
  6. 浏览器执行POST /resetPassword
  7. 将其路由到另一个更改密码的函数,然后发送回成功页面或重定向到主页或其他任何内容

长话短说,我认为您只需要接受 URL 的本来面目,并且在密码重置操作完成之前您不需要在此处重定向。

【讨论】:

  • Peter 感谢您的回复,是的,这就是我所遵循的场景,当我从 URL 中删除 /api 时,我被重定向到该页面,但浏览器给出了错误 This web page has a redirect loop
  • 写下你想看到的顺序,包括你的应用应该接收的每个 HTTP 请求和你打算发送的每个相应的 HTTP 响应,以及浏览器对每个响应的处理。重定向循环是您的编程序列中的一个非常简单的错误,您应该能够自行考虑抛出和修复。慢慢来,记笔记,仔细思考,你就能修复循环,让事情正常进行。
  • 是的,25 分钟的紧张思考解决了问题,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
相关资源
最近更新 更多