Laravel: Что такое "remember_token" в таблице "users" DB?

Безопасно ли использовать remember_token в таблице users для аутентификации пользователя в приложении?

Какова цель этого токена? В настоящее время я использую его в формах, чтобы проверить, вошел ли пользователь в систему - если токен отсутствует, я показываю экран входа. Каждый раз, когда пользователь выходит из системы, этот токен восстанавливается.

Ответы

Ответ 1

Нет. Он не должен использоваться для аутентификации. Он используется каркасом, чтобы помочь предотвратить захват печенья Remember Me. Значение обновляется после входа и выхода из системы. Если печенье захвачено злоумышленником, выведение из него делает бесполезным куки файл, поскольку он больше не подходит.

Обратитесь к этой документации:

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

Ответ 2

Мне пришлось добавить 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');

    }

}

Из командной строки вы должны отбросить таблицу пользователей, а затем перенести/семя.

Ответ 3

Laravel предоставляет токен CSRF в скрытом входе, который он автоматически добавляет и проверяет, когда будет отправлена форма, независимо от того, вошли ли вы в систему или нет. Если вы используете их построитель форм, это происходит без необходимости даже проверять его.

Вы должны проверить, зарегистрирован ли пользователь при отправке с использованием фасада Auth.

Ответ 4

Даже если это старый вопрос, я хотел бы представить вариант не использовать токен, если он вам не нужен (например, на вашем сайте не помню).

Вместо добавления фиктивного столбца в таблицу users вы можете просто запретить 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" непосредственно перед тем, как модель будет сохранена и, таким образом, предотвратит появление ошибки из-за несуществующего столбца.