Ma page d'enregistrement affiche correctement le formulaire 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. N'ont rien changé sauf les itinéraires et les redirections.
Lorsque je soumets le formulaire (juste après le rechargement également), cela indique que La page a expiré en raison de l'inactivité. Veuillez actualiser et réessayer. Erreur.
Mon être, il me manque une toute petite chose. Mais pas sûr de ce que c'est. De l'aide?
Mettre à jour
J'ai trouvé le problème. Le pilote de session a été défini sur array. Je l'ai changé en fichier et l'erreur a disparu maintenant. Mais qu'est-ce qui ne va pas si j'utilise un tableau?
php
laravel
csrf
laravel-5.5
Sougata Bose
la source
la source
array
. Je l'ai changé en fichier et l'erreur a disparu maintenant. Mais qu'est-ce qui ne va pas si j'utilise un tableau?Réponses:
Si vous arrivez à 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 défini sur fichier:
Peut avoir quelque chose à voir avec le stockage_path n'étant pas accessible en écriture. C'est là 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 a été défini sur array. Array est uniquement destiné aux tests. Étant donné que les données ne sont pas persistantes, il ne sera pas en mesure de comparer le jeton à la prochaine demande.
https://laravel.com/docs/5.5/session#configuration
Vérifiez config / session.php
Enfin, un problème que je viens d'avoir, nous avions un projet qui a le domaine de session et les paramètres sécurisés dans config / session.php mais le site de développement n'utilisait pas HTTPS (SSL / TLS). Cela a provoqué cette erreur générique puisque sessions.secure était défini sur true par défaut.
la source
Carbon::setTestNow($time);
dans les tests, je ne l'effaçais pas en utilisantCarbon::setTestNow();
ensuite.J'ai rencontré le même problème dans Laravel 5.5. Dans mon cas, c'est arrivé après avoir changé une route de GET à POST. Le problème était dû au fait que j'avais oublié de transmettre un jeton CSRF lorsque je suis passé à POST.
Vous pouvez soit publier un jeton CSRF dans votre formulaire en appelant:
Ou excluez votre route dans app / Http / Middleware / VerifyCsrfToken.php
la source
csrf_field()
présent dans le formulaire. La réponse acceptée décrit le problème. Merci.Essayez-les tous.
la source
Cela a provoqué en raison de
Illuminate\Session\TokenMismatchException
regarder cet exemple de code comment le gérer correctement:la source
Mon cas a été résolu avec
SESSION_DOMAIN
, dans ma machine locale devait être réglé surxxx.localhost
. Cela provoquait des conflits avec la productionSESSION_DOMAIN
,xxx.com
qui était définie directement dans le fichier de configuration session.php.la source
file
oucookie
?Certaines informations sont stockées dans le cookie qui est lié aux versions précédentes de laravel en développement. C'est donc en conflit avec les jetons générés par csrf qui sont générés par les versions d'un autre. Effacez simplement le cookie et essayez.
la source
<input type="hidden" name="_token" value="Umr1AlG3sScdUWGtMoHcQPPKASsR7qsd5ZE1H3Xv">
type de code dans le html généré?Pour ceux qui ont encore des problèmes et rien n'y fait. Faites attention au paramètre php.ini mbstring.func_overload. Il doit être défini sur 0. Et mbstring.internal_encoding défini sur UTF-8. Dans mon cas, c'était un problème.
la source
Je change l'autorisation de stockage et l'erreur a disparu. Il semblait que le problème était le manque de permission.
la source
ajoutez
@csrf
le formulaire et accédez également à VerifyCsrfToken.phpapp-> Http-> Middleware-> VerifyCsrfToken.php
la source
Dans mon cas, le site était bien en serveur mais pas en 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
la source
J'avais l'application avec plusieurs sous-domaines et le cookie de session était le problème entre ceux-ci. La suppression des cookies a résolu mon problème.
Aussi, essayez de régler le
SESSION_DOMAIN
dans .env fichier. Utilisez le sous-domaine exact que vous parcourez.la source
Assurez-vous d'avoir l'heure système correcte sur votre serveur Web. Dans mon cas, la machine à vagabonder était dans le futur (26 janvier 14:08:26 UTC 2226), donc bien sûr, l'heure dans le cookie de session de mon navigateur avait expiré il y a plus de 200 ans.
la source
définir mbstring.func_overload = 2
ça m'a aidé
la source
J'ai trouvé deux solutions pour éviter ces erreurs 1) en ajoutant protected $ except = ['/ yourroute'] possible désactiver l'inspection du jeton csrf à partir de la racine définie. 2) il suffit de commenter la ligne \ App \ Http \ Middleware \ VerifyCsrfToken :: class dans le groupe middleware protégé du noyau
la source
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.
la source
Réponse courte
Ajouter l'entrée d'itinéraire pour
register
dansapp/Http/Middleware/VerifyCsrfToken.php
et effacez le cache et la route du cache avec les commandes:
Détails
Chaque fois que vous accédez à un site Laravel, un token est généré, même si la session n'a pas été démarrée. Ensuite, à chaque demande, ce token (stocké dans les cookies) sera validé par rapport à son heure d'expiration, définie dans le
SESSION_LIFETIME
champ duconfig/session.php
fichier.Si vous maintenez le site ouvert pendant plus que le délai d'expiration et essayez de faire une demande, ce jeton sera évalué et l'erreur d'expiration sera renvoyée. Ainsi, pour ignorer cette validation sur les formulaires qui sont en dehors des fonctions des utilisateurs authentifiés (comme l'inscription ou la connexion), vous pouvez ajouter la route except in
app/Http/Middleware/VerifyCsrfToken.php
.la source
Plusieurs fois, cela se produit parce que vous testez un projet dans le passé
la source
Solution:
utilisez le nouvel onglet de navigation privée, puis testez-le à nouveau.
raison:
dans mon cas, un autre utilisateur s'est connecté avec mon panneau d'administration
la source