111 votes

Post request in Laravel - Erreur - 419 Désolé, votre session/ 419 votre page a expiré

J'ai installé Laravel 5.7

Ajout d'un formulaire dans le fichier \resources\views\welcome.blade.php

<form method="POST" action="/foo" >
    @csrf
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

Ajouté au dossier \routes\web.php

Route::post('/foo', function () {
    echo 1;
    return;
});

Après avoir envoyé une requête POST :

419 Désolé, votre session a expiré. Veuillez rafraîchir et réessayer.

En version 5.6 il n'y avait pas de tel problème.

0 votes

Avez-vous essayé d'ajouter une redirection ? Au lieu de return; vous pouvez appeler return redirect()->back(); . D'après ce que je vois, l'application n'a rien à faire après la requête post. Peut-être pouvez-vous la rediriger vers une vue après avoir traité la requête.

1 votes

J'ai le même problème. Lorsque je passe à la session de base de données, cela se produit et lorsque je repasse à la session de base de données, cela se produit. file para SESSION_DRIVER en .env il fonctionne bien. Pourquoi la session basée sur la base de données ne fonctionne-t-elle pas ?

0 votes

J'ai copié votre code exact dans une nouvelle installation de Laravel 5.7. Cela a fonctionné. Il y a un problème ailleurs.

0voto

lyhong Points 913

Dans mon cas, c'est très ridicule. J'obtiens l'erreur 419 quand je mets Auth::routes() en haut du fichier de route.

Auth::routes();

Route::middleware('auth')->group(function () {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});

Et j'ai réparé l'erreur en déplaçant Auth::routes(); au bas du fichier d'itinéraire.

Route::middleware('auth')->group(function () {
    Route::get('/', 'DashboardController@index')->name('dashboard');
});

Auth::routes();

Peut-être que ça peut aider votre cas aussi. Bonne chance.

0voto

Ahmad Yousef Points 305

Je veux juste dire, assurez-vous que le jeton csrf est généré, parfois c'est juste un tableau vide, comme par exemple dans un formulaire répétiteur si vous ne le générez pas dans la requête js.

0voto

Ahmad Mobaraki Points 1178

Dans mon cas, en supprimant bootstrap/cache a fixé le problème

0voto

Pour moi, l'erreur survient une fois que la session n'est plus valide et que l'utilisateur essaie de soumettre la demande de poste. Le csrf_token n'était plus valide. J'ai donc résolu le problème en modifiant le Handler.php dans le répertoire Exceptions et en essayant d'attraper l'exception token mismatch comme ceci.

La fonction de rendu était la suivante

public function render($request, Exception $exception)
{
    return parent::render($request, $exception);
}

Puis je le modifie pour qu'il ressemble à ceci

public function render($request, Exception $exception)
{

    if ($exception instanceof \Illuminate\Session\TokenMismatchException){ // <<<=========== the Code
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }

        return redirect('/home')->with('message', 'You page session expired. Please try again');
    }
    return parent::render($request, $exception);
}

Vous choisissez simplement la route qui peut gérer l'opération de rafraîchissement du jeton.

0voto

Biblbroks42 Points 300

Ajoutez votre formulaire sur .blade.php fichier {{ csrf_field() }} o @csrf comme ceci

<form method='POST' action='route("exampleRoute")'>
   {{ csrf_field() }} or @csrf
   ....
   ....
</form>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X