68 votes

laravel 5.5 La page a expiré pour cause d'inactivité. Veuillez actualiser et réessayer

Je suis nouveau chez Laravel et j'ai un problème que je ne comprends pas. J'ai un journal dans mon projet et ma méthode est POST . Lorsque j'essaie une demande, le résultat est:

'La page a expiré pour cause d'inactivité. Veuillez actualiser et réessayer.'

Mais si je change la méthode en GET , cela fonctionne bien.

Quelqu'un peut-il me dire pourquoi et comment y remédier? bien sûr, j'ai besoin de la méthode POST.

176voto

Erik Baars Points 2031

Ce problème provient de la vérification du jeton CSRF qui échoue. Donc, soit vous n'en publiez pas, soit vous en publiez une incorrecte.

Cela fonctionne pour GET parce que, pour un itinéraire GET à Laravel, aucun jeton CSRF n'est posté.

Vous pouvez poster un jeton CSRF dans votre formulaire en appelant:

 {{ csrf_field() }}
 

Ou exclure votre itinéraire (non recommandé en raison de la sécurité) en app/Http/Middleware/VerifyCsrfToken.php :

 protected $except = [
    'your/route'
];
 

35voto

Maniruzzaman Akash Points 1392

Dans mon cas, j'ai le même message d'erreur et ensuite compris que j'ai oublié d'ajouter csrf_token pour le champ de formulaire. Puis ajouter l' csrf_token.

En utilisant le formulaire assistant, qui sera,

{{ csrf_field() }}

Ou sans helper form qui sera,

<input type="hidden" name="_token" value="{{ csrf_token() }}">

Si cela ne fonctionne pas, puis-

Actualiser le cache du navigateur

et maintenant, il pourrait fonctionner, merci.

Mise À Jour Pour Laravel 5.6

Laravel intègre de nouveaux @csrf au lieu de {{ csrf_field() }}. Qui regarde plus belle maintenant.

<form action="">
   @csrf
   ...
</form>

7voto

Udhav Sarvaiya Points 676

Quand vous définissez un formulaire HTML dans votre application, vous devez inclure un caché jeton CSRF champ dans le formulaire, afin que la protection CSRF middleware peut valider la demande. Vous pouvez utiliser l' csrf_field helper pour générer le jeton de champ:

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

Il n'a pas de travail, puis sur Actualiser le cache du navigateur et maintenant, il pourrait fonctionner,

Pour plus de détails, ouvrir le lien :- la Protection CSRF dans Laravel 5.5

Mise à JOUR:

Avec Laravel 5.6 à l'aide de Lames de modèles, il est assez facile.

<form method="POST" action="/profile">
    @csrf
    ...
</form>

Pour plus de détails, ouvrir le lien :- la Protection CSRF dans Laravel 5.6

6voto

Youssouf Cherif Points 51

Vérifiez que votre fichier config / session.php contient cette ligne

 'domain' => env('SESSION_DOMAIN', null),
 

Ensuite, supprimez la ligne SESSION_DOMAIN dans votre fichier .env

3voto

Cela est dû au fait que vous utilisez le middleware CSRV par défaut de l'installation de Laravel. Pour résoudre ce problème, supprimez cette ligne de votre fichier Kernel.php:

 \App\Http\Middleware\VerifyCsrfToken::class,
 

C'est bien si vous construisez une API. Toutefois, si vous construisez un site Web, il s'agit d'une vérification de sécurité. Soyez donc conscient de ses risques.

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