Laravel: Qu'est-ce que "remember token" dans la table DB "users"?

Est-il sécuritaire d'utiliser le remember_token dans la table des utilisateurs pour l'authentification de l'utilisateur dans l'application?

Quel est le but de ce jeton? Actuellement, je suis à l'utiliser dans les formulaires pour vérifier si l'utilisateur est connecté - si le jeton n'est pas présent, je montre l'écran de connexion. Chaque fois que l'utilisateur se déconnecte, ce jeton est régénéré.

21
demandé sur Jan Żankowski 2014-04-24 11:18:53

4 réponses

Non. Il n'est pas censé être utilisé pour s'authentifier. Il est utilisé par le cadre pour aider contre Remember Me détournement de cookies. La valeur est actualisée lors de la connexion et de déconnexion. Si un cookie est détourné par une personne malveillante, la déconnexion rend le cookie détourné inutile car il ne correspond plus.

référence à cette documentation:

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

41
répondu sidneydobber 2017-11-15 20:26:43

j'ai dû ajouter le remember_token à mes utilisateurs table migration pour Auth::logout() pour fonctionner correctement.

Ajouté remember_token à mes migrations en tant que telles.

<?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');

    }

}

à partir de la ligne de commande vous devez laisser tomber la table users, puis migrer/seed.

6
répondu Cyril T 2015-11-05 18:35:00

Laravel fournit un CSRF jeton dans un caché d'entrée, il ajoute automatiquement et valide chaque fois qu'un formulaire est soumis, si vous êtes connecté ou non. Si vous utilisez leur form builder, cela se produit sans même que vous ayez besoin de vérifier.

vous devez vérifier si l'utilisateur est connecté sur la soumission en utilisant le Auth façade.

1
répondu DanielM 2015-04-19 01:21:24

même s'il s'agit d'une vieille question, je voulais présenter une option de ne pas utiliser le token si vous n'en avez pas besoin (par exemple ne pas avoir d'option Me sur votre site).

au lieu d'ajouter une colonne fictive à votre table users, vous pouvez simplement empêcher Auth::logout() de la configurer.

il suffit d'ajouter ceci à votre modèle utilisateur (Fonctionne à partir de Laravel 5.6):

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

    return parent::save($options);
}

ceci supprime la colonne' remember_token ' juste avant que le modèle soit sauvegardé et empêche ainsi qu'une erreur soit soulevée à cause de la colonne non-existante.

1
répondu LinusCDE98 2018-07-13 07:03:25