我確定有人可以比我更好地回答這個問題。
簡短的回答:
令牌使其更難有人猜測,同時使可用電子郵件中的重置鏈接重置密碼所需要的憑據。
龍答:
在文件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
來生成令牌。您可以在PHP手冊頁中閱讀關於openssl_random_pseudo_bytes的函數,但基本上它會生成一個密碼強的隨機字符串。然後Laravel接受這個字符串(仍然是隨機方法),base 64編碼它,替換一些字符,並根據默認設置16(參見定義$length = 16
)或調用者傳遞給方法的長度。
因此,您會得到一個字符串,它的加密性很強,然後作爲您的令牌進行操作。
如果您查看文件vendor/laravel/framework/src/Illuminate/Auth/DatabaseUserProvider.php
並找到方法retrieveByToken
,您會看到laravel同時使用用戶記錄ID和令牌來查找需要更改密碼的用戶。
對於有人猜測字符串和具有該標記的用戶記錄的id會非常困難,並需要知道您的應用程序的業務邏輯。
據我所知,它沒有任何阻止。我認爲這只是「某人」不知道令牌,並且在一段時間後過期會使其「足夠安全」。 – lukasgeiter 2014-11-23 16:49:08