我相信有人能比我更好地回答这个问题。
简答:
令牌使某人更难猜测重置密码所需的凭据,同时使电子邮件中的重置链接可用。
长答案:
在文件vendor/laravel/framework/src/Illuminate/Auth/Guard.php 中,您将看到方法createRememberTokenIfDoesntExist。这个方法实际上引用了它上面的另一个方法refreshRememberToken 来设置你的令牌。
它使用 laravel 辅助函数 str_random。如果你追溯这个函数的源头,你会发现它使用了vendor/laravel/framework/src/Illuminate/Support/Str.php 类的random 方法。
public static function random($length = 16)
{
if (function_exists('openssl_random_pseudo_bytes'))
{
$bytes = openssl_random_pseudo_bytes($length * 2);
if ($bytes === false)
{
throw new \RuntimeException('Unable to generate random string.');
}
return substr(str_replace(array('/', '+', '='), '', base64_encode($bytes)), 0, $length);
}
return static::quickRandom($length);
}
现在我们终于了解了构建令牌的位置。该方法使用函数openssl_random_pseudo_bytes生成令牌。您可以在openssl_random_pseudo_bytes 的 PHP 手册页中阅读有关该函数的信息,但基本上它会生成一个加密的强随机字符串。
Laravel 然后获取这个字符串(仍然在随机方法中),base 64 对其进行编码,替换一些字符,并根据默认设置 16 获取该字符串的切片(见参数定义 $length = 16)或调用者传递给方法的任何长度。
因此,您会得到一个密码强度较高的字符串,然后将其作为您的令牌进行操作。
如果你查看文件 vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php 并找到方法 retrieveByToken,你会看到 laravel 使用用户记录 ID 和令牌来查找需要更改密码的用户。
要让某人猜测该字符串和具有该令牌的用户记录的 id 将非常困难,并且需要了解您的应用程序的业务逻辑。