【发布时间】:2014-06-09 08:26:38
【问题描述】:
在用户表中使用remember_token 来验证用户进入应用程序是否安全?
这个令牌的目的是什么?目前,我在表单中使用它来检查用户是否登录 - 如果令牌不存在,我会显示登录屏幕。每次用户注销时,都会重新生成此令牌。
【问题讨论】:
标签: laravel security authentication token
在用户表中使用remember_token 来验证用户进入应用程序是否安全?
这个令牌的目的是什么?目前,我在表单中使用它来检查用户是否登录 - 如果令牌不存在,我会显示登录屏幕。每次用户注销时,都会重新生成此令牌。
【问题讨论】:
标签: laravel security authentication token
没有。它不应该用于身份验证。框架使用它来帮助防止Remember Me cookie 劫持。该值在登录和注销时刷新。如果 cookie 被恶意人员劫持,注销会使劫持的 cookie 失去作用,因为它不再匹配。
请参阅此文档:
【讨论】:
我必须将remember_token 添加到我的用户表迁移中才能使Auth::logout() 正常工作。
将remember_token 添加到我的迁移中。
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateUsersTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
//
Schema::create('users', function(Blueprint $table)
{
$table->increments('id');
$table->string('lname', 32);
$table->string('fname', 32);
$table->string('username', 32);
$table->string('email', 320);
$table->string('remember_token', 100);
$table->string('password', 64);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
//
Schema::drop('users');
}
}
您必须从命令行删除用户表,然后迁移/种子。
【讨论】:
$table->string('remember_token', 100);
即使这是一个老问题,我也想提出一个选项,如果你不需要它,就不要使用令牌(例如,在你的网站上没有记住我的选项)。
您可以阻止 Auth::logout() 设置它,而不是向您的用户表添加一个虚拟列。
只需将其添加到您的用户模型(从 Laravel 5.6 开始工作):
public function save(array $options = array()) {
if(isset($this->remember_token))
unset($this->remember_token);
return parent::save($options);
}
这会在模型保存之前删除“remember_token”列,从而防止由于不存在的列而引发错误。
【讨论】:
Laravel 在隐藏输入中提供了一个CSRF 令牌,无论您是否登录,它都会在提交表单时自动添加和验证。如果您使用的是他们的表单生成器,那么您甚至不需要检查它就可以发生这种情况。
您应该使用Auth 外观检查用户是否在提交时登录。
【讨论】: