我不会这么做。我会做什么:
创建一个表为您的链接:
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