我不會這麼做。我會做什麼:
創建一個表爲您的鏈接:
public function up()
{
Schema::create('login', function($table) {
$table->string('id')->primary();
$table->string('user_id');
$table->timestamps();
});
}
你生成一個鏈接添加一行這個表中的每個時間:
$user = User::find(1);
$login = Login::create(['id' => Login::generateID(), 'user_id' => $user->id]);
$url = "http://www.example.com/url?login_id={$login->id}"
然後當用戶點擊鏈接,你可以自動登錄他,也立即無效該鏈接:
$login = Login::findOrFail(Input::get('login_id'));
$user = User::find($login->user_id);
Auth::login($user);
$login->delete();
並創建一個藝術ISAN命令在該表periodiacally刪除舊記錄:
Login::where('created_at', '<=', Carbon\Carbon::now()->subDays(2))->delete();
這可以爲generateID()
的代碼,這是一個基本的UUID代碼生成:
public static function v4()
{
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
連接到系統上的任何這樣的字符串。
什麼是防止有人嗅探網絡流量,並在預期用戶之前使用此鏈接?假設很多用戶將通過未加密的方法檢查電子郵件是安全的。 –
爲什麼包含時間戳?散列本身在理論上是唯一的,所以只發送**散列,並將關聯的用戶ID /時間戳存儲在數據庫表中。當用戶點擊鏈接時,您在表格中查找哈希值,檢查它是否仍然有效,並在該點獲取用戶ID。 –
@JohnChrysostom所以你有什麼建議通過電子郵件驗證用戶? – Amir