web-dev-qa-db-fra.com

Laravel: Qu'est-ce que "Remember_token" dans la table de base de données "Utilisateurs"?

Est-il prudent d'utiliser le remember_token dans la table des utilisateurs pour authentifier l'utilisateur dans l'application?

Quel est le but de ce jeton? Actuellement, je l'utilise 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é.

29
Onion

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

Reportez-vous à cette documentation:

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

52
sidneydobber

J'ai dû ajouter le remember_token À la migration de ma table d'utilisateurs pour que Auth::logout() fonctionne correctement.

Ajout de 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');

    }

}

A partir de la ligne de commande, vous devez supprimer la table des utilisateurs, puis migrer/seed.

7
Cyril T

Même s'il s'agissait d'une vieille question, je souhaitais présenter une option: ne pas utiliser le jeton si vous n'en avez pas besoin (par exemple, ne vous souvenez pas de l'option sur votre site).

Au lieu d'ajouter une colonne factice à votre table d'utilisateurs, vous pouvez simplement empêcher Auth :: logout () de la définir.

Ajoutez simplement ceci à votre modèle d’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);
}

Cela supprime la colonne 'Remember_token' juste avant que le modèle ne soit enregistré, empêchant ainsi la survenue d'une erreur en raison d'une colonne inexistante.

3
LinusCDE98

Laravel fournit un jeton CSRF dans une entrée masquée qu'il ajoute et valide automatiquement chaque fois qu'un formulaire est soumis, que vous soyez connecté ou non. Si vous utilisez leur générateur de formulaire, cela se produit sans même que vous ayez besoin de le vérifier.

Vous devez vérifier si l'utilisateur est connecté lors de la soumission à l'aide de la façade Auth.

1
DanielM