web-dev-qa-db-fra.com

Laravel 5.8 Affichage "419 page Expiré" Après avoir cliqué sur la déconnexion d'une session déjà effacée

Je gère le PHP Artisan goot: auth commandement et je vais expliquer étape par étape ce que je fais après cela pour comprendre le scénario,

  • Connectez-vous à une nouvelle session (exemple.com/home)
  • ouvert un nouvel onglet et collez l'URL, c'est-à-dire exemple.com/home.
  • Maintenant, 2 onglets sont ouverts avec la même session.
  • J'ai cliqué sur déconnecter dans l'un des onglets et ça fonctionne parfaitement bien
  • Ensuite, lorsque j'ai essayé de me déconnecter de l'autre onglet, il me donne une erreur disant "419 page expiré" et il se passe nulle part même après la rechargement.

Ce n'est que ces types de scénarios peuvent survenir, et je ne veux pas voir ce message d'erreur, juste déconnecter après avoir cliqué sur la déconnexion, même si la session est expirée.

Remarque: ce problème n'est pas à cause de l'ajout de @CSRF

12
Sobin Augustine
<a href="{{ route('logout') }}" class="dropdown-item notify-item"="event.preventDefault(); document.getElementById('logout-form').submit();">
    <i class="fa fa-power-off"></i>  <span>{{ __('Logout') }} </span>
    </a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
  @csrf
</form>

Vous avez manqué le formulaire de déconnexion @csrf dans votre page de déconnexion, alors vous obtenez une erreur 419

0
Gowthaman D

Dans A Laravel 6 projet, j'ai fini par modifier le VerifyCsrfTokenMiddleware comme suit

Comme vous le verrez, j'ai simplement ajouté le logout itinéraire nommé à la liste d'exclusion.

J'ai remplacé la fonction __construct Car nous ne pouvons pas utiliser route() fonction lors de l'initialisation d'une nouvelle variable

<?php

namespace App\Http\Middleware;

use Illuminate\Contracts\Encryption\Encrypter;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * Indicates whether the XSRF-TOKEN cookie should be set on the response.
     *
     * @var bool
     */
    protected $addHttpCookie = true;

    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [

    ];

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Foundation\Application  $app
     * @param  \Illuminate\Contracts\Encryption\Encrypter  $encrypter
     * @return void
     */
    public function __construct(Application $app, Encrypter $encrypter)
    {
        parent::__construct($app, $encrypter);
        $this->except = [
            route('logout')
        ];
    }
}
0
realtebo