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

Oni*_*ion 29 security authentication token laravel

remember_token在users表中使用用户身份验证应用程序是否安全?

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

sid*_*ber 53

不,它不应该用于验证.框架使用它来帮助防止Remember Mecookie劫持.登录和注销时刷新该值.如果cookie被恶意攻击者劫持,则注销会使被劫持的cookie无法使用,因为它不再匹配.

请参阅此文档:

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


小智 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');

    }

}
Run Code Online (Sandbox Code Playgroud)

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

  • 只是想指出一个小改动 - 根据[Laravel升级指南] [http://laravel.com/docs/upgrade#upgrade-4.1.26],remember_token应该是100而不是64 - 所以`$ table-> string('remember_token',100);` (2认同)

Lin*_*CDE 5

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

您可以阻止 Auth::logout() 设置它,而不是向您的用户表中添加一个虚拟列。

只需将此添加到您的用户模型中(从 Laravel 5.6 开始工作):

public function save(array $options = array()) {
    if(isset($this->remember_token))
        unset($this->remember_token);

    return parent::save($options);
}
Run Code Online (Sandbox Code Playgroud)

这会在保存模型之前删除“remember_token”列,从而防止由于不存在的列而引发错误。