PHP - 如何实现密码重置和令牌过期

php
2022-08-30 22:45:19

我希望设置一个php密码恢复脚本,使用24小时后过期的令牌。但我不知道该怎么做。我目前已加密用户密码。我想做的就是将令牌附加到URL,当用户请求密码重置时,该令牌将发送给用户。但是,我如何正确地执行此操作,我需要在数据库中存储什么?SHA1


答案 1
  1. 当用户请求重置密码时,生成令牌并计算其到期日期
  2. 将令牌及其到期日期存储在用户表中该用户的单独列中
  3. 向用户发送一封包含重置链接的电子邮件,并将令牌附加到其 URL
  4. 当您的用户点击链接时,请从您的URL中获取令牌(可能带有$_GET['token'])
  5. 根据用户表验证令牌
  6. 检查它是否尚未超过其到期日期
    • 如果它已过期,则通过清除字段并使其失效,并允许用户重新发送
  7. 如果令牌有效且可用,请向用户出示密码重置表单
  8. 验证并更新密码,并清除令牌和到期字段

答案 2

我根本不会使用数据库。而是单向加密。
只需在邮件中提供的超链接中发送必要的信息,并由哈希签名即可。类似的东西

$token = sha1($user_id.$time.$user_pass.$salt).dechex(time()).dechex($user_id);
$link = "http://".$domain."/restorepass/?token=$token";

通过接收它,只需拆分并解码它,然后检查哈希和超时。


推荐