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.

3voto

engrhussainahmad Points 652

Il n'y a pas de problème dans le code. J'ai vérifié avec le même code que vous avez écrit avec une nouvelle installation.

Code de formulaire :

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

web.php le code du fichier :

Route::get('/', function () {
    return view('welcome');
});

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

Le résultat après avoir soumis le formulaire est : Output after submitting the form

Si vous effacez le cache de votre navigateur ou si vous essayez avec un autre navigateur, je pense que le problème sera résolu.

3voto

ismail bangee Points 73

Après tant de temps, je l'ai résolu de cette manière

Le chemin d'installation de Laravel n'est pas le même que celui défini dans le fichier de configuration session.php.

'domain' => env('SESSION_DOMAIN', 'example.com'),

3voto

samair ali Points 623

Ajoutez le jeton csrf et votre problème sera résolu . {{csrf_token}} ou @csrf

3voto

Rafayel Points 43

Allez dans config/sessions.php

trouver la ligne

'secure' => env('SESSION_SECURE_COOKIE', true),

changez-le en false

'secure' => env('SESSION_SECURE_COOKIE', false),

Si ce paramètre est réglé sur VRAI, le navigateur vous demandera d'utiliser le protocole HTTPS, sinon il ne stockera pas la session. Comme il n'est pas valide

2voto

user3084135 Points 81

C'est peut-être exagéré, mais vous pouvez essayer ceci :

// Appel du formulaire nommé route avec ajout d'un champ caché pour les jetons.

<form method="POST" action="{{ route('foo') }}" >
    @csrf
    <input type="hidden" name="_token" value="{!! csrf_token() !!}">
    <input type="text" name="name"/><br/>
    <input type="submit" value="Add"/>
</form>

// Nommé Route

Route::post('/foo', function () {
    return 'bar';
})->name('foo');

// Ajouter ceci dans le <head></head> bloc :

<meta name="_token" content="{!! csrf_token() !!}" />

Je l'ai testé sur mon ordinateur local en utilisant Homestead sur Laravel 5.7 qui était une nouvelle installation utilisant Laravel Installer 2.0.1 et cela a fonctionné. Quel est votre environnement ?

Théorie : Je me demande si cela n'a pas quelque chose à voir avec le fait que lame rende les balises html avec {{ }} vs. {!! !!} en fonction de votre environnement ou de la manière dont vous le servez (par ex. php artisan serve ). Ce qui me fait penser que c'est line 335 de /vendor/laravel/framework/src/illuminate/Foundation/helpers.php devrait rendre la même ligne que celle tapée manuellement ci-dessus.

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