Ma page de registre montre le formulaire correctement avec CsrfToken ({{ csrf_field() }}
) présent dans le formulaire).
Formulaire HTML
<form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}">
{{ csrf_field() }}
....
</form>
J'utilise l'authentification intégrée pour les utilisateurs. Je n'ai rien changé sauf les routes et les redirections.
Lorsque je soumets le formulaire (juste après le rechargement également), il indique que La page a expiré pour cause d'inactivité. Veuillez actualiser et essayer à nouveau. error.
Mon être me manque une très petite chose. Mais je ne sais pas ce que c'est. De l'aide?
Mise à jour
Trouvé le problème. Le pilote de session a été défini sur array. Changé le fichier et l'erreur est parti maintenant. Mais qu'est-ce qui ne va pas si j'utilise array?
Si vous obtenez cette réponse directement à partir d'une recherche , assurez-vous d'avoir déjà ajouté le jeton csrf à votre formulaire avec {{ csrf_field() }}
comme l'OP.
Si votre pilote de session est configuré pour le fichier:
Peut avoir quelque chose à voir avec le chemin storage_path qui n'est pas accessible en écriture. C’est ici qu’il stocke les données de session concernant les jetons si vous utilisez des sessions basées sur des fichiers. Le peut être vérifié avec is_writable(config('session.files'))
Pour l'OP, le pilote de session était défini sur array. Array est uniquement destiné aux tests. Comme les données ne sont pas conservées, il ne sera pas en mesure de comparer le jeton lors de la prochaine requête.
Le pilote de matrice est utilisé pendant les tests et empêche la persistance des données stockées dans la session.
https://laravel.com/docs/5.5/session#configuration
Vérifiez config/session.php
Enfin, un problème que je viens d’être confronté, nous avions un projet contenant le domaine de session et les paramètres sécurisés dans config/session.php, mais le site de développement n’utilisait pas le protocole HTTPS (SSL/TLS). Cette erreur générique était due au fait que sessions.secure était défini sur true par défaut.
J'ai rencontré le même problème dans Laravel 5.5. Dans mon cas, cela s'est produit après le changement d'un itinéraire de GET à POST. Le problème était dû au fait que j'avais oublié de passer un jeton CSRF lorsque je suis passé à POST.
Vous pouvez poster un jeton CSRF dans votre formulaire en appelant:
{{ csrf_field() }}
Ou exclure votre route dans app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'your/route'
];
Essayez-les tous.
composer dump-autoload
php artisan optimize
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
Cela a été causé par Illuminate\Session\TokenMismatchException
. Regardez cet exemple de code pour savoir comment le gérer correctement:
Mon cas a été résolu avec SESSION_DOMAIN
, dans mon ordinateur local devait être réglé sur xxx.localhost
. Cela provoquait des conflits avec la production SESSION_DOMAIN
, xxx.com
définie directement dans le fichier de configuration session.php.
Certaines informations sont stockées dans le cookie qui est lié aux versions précédentes de laravel en développement. Donc, il est en conflit avec les jetons générés par csrf qui sont générés par les versions d'un autre. Il suffit d'effacer le cookie et d'essayer.
Pour ceux qui ont encore des problèmes et rien n'a aidé. Faites attention au paramètre php.ini mbstring.func_overload. Il doit être défini sur 0. Et mbstring.internal_encoding est défini sur UTF-8. Dans mon cas, c'était un problème.
Je change l'autorisation de stockage et l'erreur disparut. Le problème semblait être le manque de permission.
Sudo chmod -R 775 storage/
Dans mon cas, le site fonctionnait bien sur le serveur mais pas sur le local. Ensuite, je me souviens que je travaillais sur un site Web sécurisé.
Donc, dans le fichier config.session.php, définissez la variable secure sur false
'secure' => env('SESSION_SECURE_COOKIE', false),
J'ai eu le même problème, mais le problème n'est pas dans le cadre mais dans le navigateur. Je ne sais pas pourquoi, mais Google chrome bloque automatiquement les cookies, dans mon cas. Après avoir autorisé les cookies, le problème a été résolu.
set mbstring.func_overload = 2
ça m'a aidé
Assurez-vous d'avoir l'heure système correcte sur votre serveur Web. Dans mon cas, la machine à vagabondage était dans le futur (le 26 janvier à 14:08:26 UTC 2226), donc bien sûr, le cookie de session de mon navigateur avait expiré il y a plus de 200 ans.
J'ai eu l'application avec plusieurs sous-domaines et le cookie de session était le problème entre ceux-ci. Effacer les cookies a résolu mon problème.
Essayez également de définir le fichier SESSION_DOMAIN
dans . Env. Utilisez le sous-domaine exact sur lequel vous naviguez.
Réponse courte
Ajoutez l'entrée de route pour register
dans app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
'/routeTo/register'
];
et effacez le cache et la route du cache avec les commandes:
php artisan cache:clear && php artisan route:clear
Détails
Chaque fois que vous accédez à un site Laravel, un jeton est généré, même si la session n'a pas été démarrée. Ensuite, dans chaque demande, ce jeton (stocké dans les cookies) sera validé par rapport à son délai d'expiration, défini dans le champ SESSION_LIFETIME
du fichier config/session.php
.
Si vous laissez le site ouvert plus longtemps que le délai d'expiration et tentez de faire une demande, ce jeton sera évalué et l'erreur d'expiration sera renvoyée. Ainsi, pour ignorer cette validation sur les formulaires ne faisant pas partie des fonctions des utilisateurs authentifiés (tels que s'inscrire ou se connecter), vous pouvez ajouter la route sauf dans app/Http/Middleware/VerifyCsrfToken.php
.
J'ai trouvé deux solutions pour éviter ces erreurs 1) en ajoutant protected $ except = ['/ yourroute'] possible désactiver l'inspection de jeton csrf à partir de la racine définie. 2) juste comment\App\Http\Middleware\VerifyCsrfToken :: ligne de classe dans un groupe de middleware protégé dans le noyau