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é.
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:
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.
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.
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
.