PHP 管理忘记密码

PHP managing forgot password

我正在处理一个忘记密码的页面,并试图找出最好的方法。目前,当用户访问该页面时,它会询问他们的电子邮件。该脚本检查该帐户是否存在,并向他们发送一封包含 link 的电子邮件,以单击以重置他们的密码。

link 包含一个令牌(就是 md5(uniqid()))和用户选择新密码时要与数据库匹配的电子邮件地址。它将令牌存储在数据库中 table password_resets 以及从现在起 24 小时的到期日期和他们帐户详细信息的外键。

当用户选择新密码时,它将令牌与 password_resets table 相匹配,将电子邮件发送到该外键的电子邮件地址,并确保到期日期在设置前的未来新密码并从 password_resets.

中删除记录

这是一种有效的方法吗?为此目的而使用整个 table 似乎是多余的。有更好的方法吗?

通常我会推荐相同的方法,但我注意到你写的是一种有效的方法。可以有一个 actually.I 正在使用 following

<?php
    # $key is super secret
    $key = "someRandomKey";
    function gen_token($email,$username) {
        $token = array(
            "email" => $email,
            "username" => $username,
            "created" => time()
        );
        return JWT::encode($token, $key);
    }

    function validate_token($token,$newPassword) {
        # Step below only works on valid token generates on your server
        $data = (array) JWT::decode($jwt, $key, array('HS256'));
        $currentTime = time();
        # Validate difference between $currentTime and $data["created"]
        # If time valid update password
    }
?>

此方法可以显着减少数据库延迟,还可以让您选择在令牌本身上存储一些验证数据。