web-dev-qa-db-fra.com

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 requête, le résultat est le suivant: '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.

54
Svetlozar

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.

La raison pour laquelle cela fonctionne pour GET est 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É) dans app/Http/Middleware/VerifyCsrfToken.php:

protected $except = [
    'your/route'
];
148
Erik Baars

Dans mon cas, j'ai le même message d'erreur et j'ai ensuite découvert que je n'avais pas ajouté csrf_token pour le champ de formulaire. Ajoutez ensuite le csrf_token.

En utilisant un assistant de forme qui sera,

{{ csrf_field() }}

Ou sans aide de forme qui sera,

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

Si cela ne fonctionne pas, alors-

Actualiser le cache du navigateur  

et maintenant cela pourrait fonctionner, merci.

Mise à jour pour Laravel 5.6  

Laravel intègre le nouveau @csrf au lieu de {{ csrf_field() }}. Cela a l'air plus gentil maintenant.

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

Chaque fois que vous définissez un formulaire HTML dans votre application, vous devez inclure un champ de jeton CSRF masqué dans le formulaire afin que le middleware de protection CSRF puisse valider la demande. Vous pouvez utiliser l’assistant csrf_field pour générer le champ de jeton:

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

Cela ne fonctionne pas, puis actualisez le cache du navigateur et cela pourrait fonctionner maintenant, 

Pour plus de détails ouvrir le lien: - CSRF Protection in Laravel 5.5

METTRE À JOUR:

Avec Laravel 5.6 et les modèles de lames, c’est très simple.

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

Pour plus de détails ouvrir le lien: - CSRF Protection in Laravel 5.6

7
Udhav Sarvaiya

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

3
Youssouf Cherif

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.

3

J'ai essayé différentes solutions pour résoudre le problème pendant plusieurs semaines sans succès.

Le problème que je rencontrais a été causé par la mise à niveau de laravel 5.0 à 5.5 et j'ai oublié de mettre à jour config/session.php

Si quelqu'un fait face au problème, essayez de mettre à jour le fichier config/session.php afin qu'il corresponde à la version de Laravel que vous utilisez.

2
Rayton Kiwelu

Placez {{csrf_field()}} dans votre balise form

 enter image description here

2
Wael Assaf

j'ai eu le même problème. utilisez 'clear navigation data' en chrome. peut-être résoudre votre problème.

si votre configuration est définie: SESSION_DRIVER = fichier, vous devez vérifier si votre répertoire de session est en écriture. Vérifier le stockage/framework/session

1
Pawel Kolodziejuk

Je faisais face à la même erreur alors je viens de supprimer cette ligne de mon fichier .env

SESSION_DRIVER = yourwebsite.com

1
Akash Sethi

Il suffit de placer ce code dans le formulaire 

<input type = "hidden" name = "_token" value = "<?php echo csrf_token() ?>" />
1
Manu Joseph

Dans mon cas, j'ai ajouté ob_start (); au sommet de mon index.php sur le serveur et tout semble bien fonctionner.

1
Ayan Mohammad

Si vous avez déjà inclus le jeton CSRF dans votre formulaire. Ensuite, vous obtenez la page d'erreur probablement en raison de la présence de données en cache dans votre formulaire. Ouvrez votre invite de terminal/de commande et exécutez ces commandes à la racine du projet.

  1. php artisan cache: effacer 
  2. php artisan config: effacer 
  3. php artisan route: clair 
  4. vue artisan php: effacer

Essayez également de vider le cache du navigateur avec l'exécution de ces commandes.

1
Aneeqa Chowdhury

Quiconque a encore ce problème utilise le code suivant dans votre formulaire comme ci-dessous.

 echo '<input type = "hidden" name = "_token" value = "'. csrf_token().'" >';
1
Sineth Lakshitha

Exclusion des URI de la protection CSRF:

Parfois, vous pouvez souhaiter exclure un ensemble d'URI de la protection CSRF. Par exemple, si vous utilisez Stripe pour traiter des paiements et utilisez son système webhook, vous devez exclure votre itinéraire de gestionnaire de compte Web Stripe de la protection CSRF car Stripe ne saura pas quel jeton CSRF envoyer sur vos itinéraires.

En règle générale, vous devez placer ces types de routes en dehors du groupe de middleware Web que RouteServiceProvider applique à toutes les routes du fichier routes/web.php. Cependant, vous pouvez également exclure les routes en ajoutant leurs URI à la propriété $ except du middleware VerifyCsrfToken:

<?php

namespace App\Http\Middleware;

use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ];
}
0
Kamlesh

C'est drôle mais ça marche pour moi. J'ai réalisé que cela est dû au défaut HTML TAG dans le code Laravel. Utilisez/* */ou {{- -}} à la place

Ou essayez de supprimer le code HTML récemment entré dans votre code ....__ ou modifiez le commentaire Html en commentaire Php ... Ou essayez d'exécuter une commande quelconque de Worng artisan comme le navigateur propre de php artisan données avec elle erreur ...

0
samtax01

si vous avez besoin de changer forme action avec Javascript vous aurez le même problème 

1 .first vous devez utiliserau lieu de {!!Form::open() !!} {!! close() !!} dans laravel
2 .seconde vous commencez le plus votre action avec https://www.example.com +your Route

Ne pas oublier www dans votre URL !!!

0
Mohammad Khan
  1. Il se peut que le jeton CSRF n'ait pas dans votre formulaire. Vous devez utiliser @crsf ou {{ csrf_field() }}

  2. Si vous utilisez csrf sur votre formulaire. Ce peut être cache. Videz le cache de votre application.

    php artisan cache: effacer

    vue artisan php: effacer

    php artisan cache: effacer

    Et effacez le cache de votre navigateur.

    1. Si des erreurs vous réapparaissent, créez une nouvelle clé.

clé artisan php: générer

0
Turan Zamanlı

J'ai eu le même problème, j'ai essayé beaucoup de solutions. mais aucun n'a fonctionné pour moi. puis j'ai découvert que, pour une raison quelconque, je l'utilisais dans mon fichier .env:

SESSION_DOMAIN = myapp.me

et dès que je l'ai remis à zéro, tout a bien fonctionné.

0
Ahmed Marzouk

mon problème est résolu en ajoutant simplement @csrf dans la balise de formulaire

Laravel 5.6 ne supporte pas {{ csrf_field() }}, ajoutez simplement @csrf à la place de {{ csrf_field() }}

larvel_fix_error.png

0
mysticmeelone

Dans mon cas, le même problème était dû au fait que j'avais oublié d'ajouter > à la fin de mon champ de saisie masqué, comme suit: <input type="hidden" name="_token" value="{{ Session::token() }}" 

Donc, je l'ai corrigé en l'ajoutant:

<input type="hidden" name="_token" value="{{ Session::token() }}">
0
Kaloyan Drenski

Nous l'avons fait fonctionner en copiant les routes de Router.php au lieu d'utiliser Auth :: routes (), voici les routes dont vous avez besoin:

Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout')->name('logout');

// Registration Routes...
Route::get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
Route::post('register', 'Auth\RegisterController@register');

// Password Reset Routes...
Route::get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
Route::post('password/reset', 'Auth\ResetPasswordController@reset');
0
Notflip

Je sais que cette question a reçu une réponse satisfaisante, mais je voulais mentionner un correctif qui a fonctionné dans mon cas. J'ai ajouté {{ csrf_field() }} et cela ne fonctionnait toujours pas. 

Ensuite, je me suis rappelé que j'avais bloqué tous les cookies à des fins de développement, ce qui peut être agréable lorsque vous modifiez la page et souhaitez l'actualiser.

Une fois que j'ai modifié les paramètres pour arrêter de bloquer tous les cookies dans MS Edge browser, le problème a disparu.

0
ghostcoder23x

Commencez par inclure CSRF dans votre formulaire.

{{ csrf_field() }}

si le problème ne résout pas le problème, utilisez ob_start(); au tout début de index.php.

<?php ob_start();
0
Abid Shah

Ajoutez simplement @csrf dans votre balise de formulaire.

Ou vous pouvez inclure csrf_token dans l'en-tête pour l'envoyer à chaque demande.

0
Shaz