gpt4 book ai didi

php - 如何使 token 过期

转载 作者:行者123 更新时间:2023-12-02 07:01:00 25 4
gpt4 key购买 nike

我正在尝试使用 PHP 编写密码恢复脚本,在 SO 中查看这里之后,最佳实践的共识似乎是

  • 生成过期 token
  • 通过电子邮件向用户发送 token
  • 用户点击 token 并更改密码。

我目前有生成 token 的功能,但我将如何让它过期?另外, token 的良好保质期是多少?

token 生成代码:

    function crypto_rand_secure($min, $max) {
$range = $max - $min;
if ($range < 0) return $min; // not so random...
$log = log($range, 2);
$bytes = (int) ($log / 8) + 1; // length in bytes
$bits = (int) $log + 1; // length in bits
$filter = (int) (1 << $bits) - 1; // set all lower bits to 1
do {
$rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
$rnd = $rnd & $filter; // discard irrelevant bits
} while ($rnd >= $range);
return $min + $rnd;
}

function GenerateToken($length){
$token = "";
$codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$codeAlphabet.= "abcdefghijklmnopqrstuvwxyz";
$codeAlphabet.= "0123456789";
for($i=0;$i<$length;$i++){
$token .= $codeAlphabet[crypto_rand_secure(0,strlen($codeAlphabet))];
}
return $token;
}

P.s 上面的代码是从 S.O 上的另一个问题复制粘贴的

最佳答案

你可以这样做

使用以下字段创建一个名为 password_recovery 的表

  • id 主键自动递增
  • iduser int(11)//长度可以根据需要选择
  • token_key varchar(100)//长度可以根据需要选择
  • expire_date 日期时间
  • created_date 日期时间

现在,当有人请求恢复密码时,通常通过输入登录名或电子邮件获取该用户的 iduser。然后生成 token 。您可以根据需要设置 expire_date。假设从现在开始 1 天,您可以使用 strtotime() 来生成它。在 password_recovery 表中插入这些值。

然后将电子邮件发送给用户的电子邮件 ID,例如

yourdomain.com/passrecover.php?h=[上面的 token ]

一旦用户点击链接,运行代码检查 token 是否有效以及是否过期。如果是这样,请显示密码重置表单。您将拥有来自该 token 的 iduser。否则显示错误信息。

最后一旦用户重置密码,从表中删除该行。

您还可以使用 cronjob 脚本从表中删除过期的 token 。

关于php - 如何使 token 过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20867559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com