【问题标题】:Password Reset Redirect URL in CookieCookie 中的密码重置重定向 URL
【发布时间】:2018-05-23 21:19:16
【问题描述】:

我的密码重置过程如下:

  1. 用户点击按钮,向提供的邮箱发送重置邮件
  2. 点击密码重置链接,打开网页
  3. 用户提交新密码
  4. 重定向回用户原来的位置(例如“查看购物车页面”)

我无法使用$_SERVER['HTTP_REFERER'],因为在重置密码时,某些身份验证算法的逻辑中有多个重定向。使用 HTTP_REFERER 是不可靠的(我认为)。

将原始 URL 存储在 cookie 中,然后在用户完成密码重置过程后使用 cookie 中的数据是不是一个坏主意?还是我应该走不同的路线,将重定向链接作为参数保留在重置电子邮件链接中,并将其存储在重置密码表单的隐藏字段中?

欢迎提出任何建议!

【问题讨论】:

  • 密码重置后,我会将它们发送回首页或自己登录。
  • 有什么特别的原因吗?我在互联网上看到了一些东西,说明了为什么返回登录页面或主页是一个更好的主意,但没有什么真正有说服力的。 @史密斯
  • 即使在电子商务网站上,我也希望能被个人带走。
  • 通过电子邮件发送重置令牌意味着在用户实际重置密码之前需要一定的时间。当他们请求重置时,用户会记得(更不用说关心)他们在哪里吗?所以我和史密斯在这里。但是,如果您决心这样做,那么就去无状态并将重定向信息添加到您的电子邮件重置链接。

标签: php symfony


【解决方案1】:

您可以生成一个唯一的 ID。然后,您将发送一个指向电子邮件地址的链接,该链接具有获取参数 f.e. 中的唯一 ID:reset_password?id=21948HJK9 要验证它是否是正确的用户,您可以将 id 存储在数据库中,如果有人试图在 24 小时后访问它,则将其删除。当 reset_password 打开时,您在数据库中搜索 id 并验证它。在数据库中,id 连接到帐户。如果数据库中的 id 和 get 参数匹配,则验证。

【讨论】:

  • 我认为他已经完成了那部分,问题是关于将用户返回到以前的位置
  • 然后他可以将其添加到数据库中,并与 id 和用户数据在同一列中
【解决方案2】:

根据您提供给我们的流程,步骤 1 应该将 URL 的值存储在某处。

您的“重置密码”按钮可能是这样的:

<a href="reset_password.php?prev_url=<?php echo urlencode($_SERVER['REQUEST_URI']); ?>">Reset password</a>

这将为您提供一个带有当前 URL 编码的变量,即用户所在的页面。

然后,reset_password.php 文件可以将$_GET['prev_url'] URL 存储在您的密码重置表(也存储重置链接)中。

因此,在您的最后一步中,当您的重置链接得到验证时,只需将表中的prev_url 列存储在一个变量中(在我的示例中为$prev_url)并执行以下操作:

header('location:'.$prev_url);

【讨论】:

    猜你喜欢
    • 2012-12-15
    • 2016-07-17
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多