Laravel:“用户”数据库表中的“remember_token”是什么?

时间:2014-04-24 07:18:54

标签: laravel security authentication token

使用users表中的remember_token来验证用户进入应用程序是否安全?

此令牌的目的是什么?目前,我在表单中使用它来检查用户是否已登录 - 如果令牌不存在,我会显示登录屏幕。每次用户注销时,都会重新生成此令牌。

4 个答案:

答案 0 :(得分:45)

没有。它不应该被用来进行身份验证。框架使用它来帮助抵御Remember Me cookie劫持。登录和注销时刷新该值。如果cookie被恶意攻击者劫持,则注销会使被劫持的cookie无法使用,因为它不再匹配。

请参阅此文档:

https://laravel.com/docs/upgrade#upgrade-4.1.26

答案 1 :(得分:7)

我必须将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');

    }

}

从命令行,您必须删除users表,然后迁移/ seed。

答案 2 :(得分:3)

即使这是一个老问题,我也想提出一个不需要使用令牌的选项(例如,您的网站上没有“记住我”的选项)。

您可以仅阻止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”列,从而防止由于列不存在而引起错误。

答案 3 :(得分:1)

Laravel在隐藏输入中提供CSRF令牌,无论您是否已登录,它都会在表单提交时自动添加和验证。如果你正在使用他们的表单构建器,这种情况就会发生,你甚至不需要检查它。

您应该使用Auth外观检查用户是否已在提交时登录。