web-dev-qa-db-fra.com

Laravel 5 Auth Post Submit - TokenMismatchException dans la ligne VerifyCsrfToken.php 46

Je viens juste de télécharger une nouvelle application dans Laravel 5 et je ne parviens pas à utiliser l'authentification out of the box ...

Je continue à recevoir: TokenMismatchException dans VerifyCsrfToken.php ligne 46: Lors de la soumission du formulaire de connexion ou du formulaire d'inscription ...

Je peux voir sur la page de formulaire de connexion les codes de jeton qui se trouvent dans le champ de formulaire masqué et la session à ce point sont les mêmes ...

En guise de test, j’ai également essayé, ainsi que d’autres publications suggérées de commenter // 'App\Http\Middleware\VerifyCsrfToken', dans app/Http/kernal.php pour voir ce qui se produirait. Après cela, chaque fois que je soumets un formulaire, je reçois un message indiquant que la redirection est la suivante:/auth/login ou/auth/register, en fonction de ma provenance, sans succès.

La chose étrange était que cela fonctionnait lorsque j'ai installé le framework pour la première fois. Depuis lors, tout ce que j'ai fait, c'est exécuter quelques migrations et configurer certains de mes modèles et contrôleurs, puis ensemencer la base de données avec des données utilisateur.

METTRE À JOUR:

En regardant plus loin dans la fonction tokensMatch () à la ligne 55 de VerifyCsrfToken.php si I:

var_dump($request->session()->token());

var_dump($request->input('_token'));

Je peux voir que les deux jetons sont différents mais à la forme en utilisant:

var_dump(Session::all());

{{{ csrf_token() }}}

Ce sont les mêmes. Le jeton de session a quelque peu changé avant d’atteindre la fonction tokensMatch () à la ligne 55 de VerifyCsrfToken.php

Ma trace de pile est la suivante:

in VerifyCsrfToken.php line 46
at VerifyCsrfToken->handle(object(Request), object(Closure)) in VerifyCsrfToken.php line 17
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in ShareErrorsFromSession.php line 55
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in StartSession.php line 61
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 36
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in EncryptCookies.php line 40
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in CheckForMaintenanceMode.php line 42
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 125
at Pipeline->Illuminate\Pipeline\{closure}(object(Request))
at call_user_func(object(Closure), object(Request)) in Pipeline.php line 101
at Pipeline->then(object(Closure)) in Kernel.php line 111
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 84
at Kernel->handle(object(Request)) in index.php line 53
30
trenthogan

Je viens juste de le faire fonctionner en supprimant la ligne:

'Illuminate\Foundation\Http\Middleware\VerifyCsrfToken'

à partir de /app/Http/Resquests/Kernel.php. Toutefois, cela signifie que la vérification des jetons CSRF sera supprimée, ce qui implique que votre site Web ne sera pas protégé contre les contrefaçons de requêtes entre sites.

Update Selon la documentation , vous devez ajouter le jeton CSRF à votre formulaire en ajoutant cet extrait de code à votre code:

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

J'ai utilisé la première manière dans les services principaux pour application mobile, mais je constate que je peux envoyer un en-tête CSRF dans les requêtes.

25
Mahmoud Nassar

Selon la documentation peut être pourquoi:

Insérer le jeton CSRF dans un formulaire

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

J'ai eu le même problème. Je l'ai résolu en changeant la ligne suivante dans config/session.php

'domain' => env('DOMAIN', 'yourdomainnamehere.co.uk'),

Ajoutez ensuite la ligne suivante dans votre fichier .env

DOMAIN=null
5
Phoenix1331

Vérifiez votre fichier routes.php. J'ai également eu cette erreur et elle s'est avérée être provoquée par une ligne blanche en haut (juste avant la balise d'ouverture <?php). Une telle erreur stupide, espérons que cela pourrait aider quelqu'un.

4
Myone

J'ai eu le même problème, ma solution était

<form method="POST" action="path_to_action">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
    <input type="text" name="some_name">
</form>
3
Xabir

Si vous utilisez des modèles de lame, vous pouvez utiliser mettre dans votre formulaire

{{ csrf_field() }}

au lieu de 

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

Cela a fonctionné avec moi dans Laravel 5.1.

2
Organic Advocate

Si vous souhaitez vous débarrasser de TokenMismatchException dans VerifyCsrfToken.php, vérifiez ce lien pour obtenir une solution simple de @Tariq Khan: TokenMismatchException dans VerifyCsrfToken.php

1
Chandz

Il suffit de vous déconnecter et de vous reconnecter, c’est le seul moyen C’est un bogue inconnu même si je le trouve dans mon formulaire, mais parfois. résoudre le problème il suffit de vous déconnecter et de vous reconnecter

1
msonowal

Si vous voulez utiliser CSRF dans un formulaire, vous devez ajouter cette ligne dans votre formulaire.

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

et si vous n'êtes pas intéressé pour utiliser CSRF, vous devez commenter la ligne ci-dessous dans le fichier kernel.php

//\App\Http\Middleware\VerifyCsrfToken::class,
0
Jayant Pandey

Essayez php artisan route: listez et vérifiez que le web middleware est répété . Par exemple (web, web, autres).

Dans Laravel 5.3, le middleware Web est activé par défaut, j'ai ajouté 

Route::group(['middleware' => 'web'], function () { ALL MY ROUTE });

avec ce TokenMismatch a été généré.

Des itinéraires fixes résolvent le problème pour moi.

Pour plus d'informations, voir Question on Laracast

0
FilippoLcr

J'ai également eu la même situation aujourd'hui, dès que mon application a commencé à me montrer ce message.

Je viens de redémarrer mon serveur et tout est rentré dans l'ordre.

0
carlosbvz

Fait intéressant, je rencontre le même problème récemment. J'ai trouvé deux jetons différents générés par mon application Laravel 5.1. J'ai résolu le problème en générant une nouvelle clé d'application [clé d'artisan php: générer]!

0
Frank Liu

J'ai eu le même problème, en cours d'exécution php artisan config: cache

résolu tout.

J'espère que ça aidera quelqu'un

0
Olaogun Toluwalase

un fichier goto appelé ... VrifyCsrfToken.php. situé à app/Http/Middleware /

dossier.

et changer suivant ....

espace de noms App\Http\Middleware;

utilisez Illuminate\Foundation\Http\Middleware\VerifyCsrfToken en tant que BaseVerifier;

la classe VerifyCsrfToken étend BaseVerifier {

protected $except = [
    "*" .   //make * here . as is did.
];

}

0
khatri rohan

Peut-être que c'est quelque chose avec vos paramètres de domaine d'application.

  1. Vérifiez le paramètre 'domaine' dans config/session.php.
  2. Définissez-le sur 'localhost' ou sur le domaine approprié associé à votre application.
  3. Sauvegarder le fichier

Le mien a été récupéré à partir du fichier env et l'application était sur un domaine différent.

J'espère que ça va sauver des cellules cérébrales pour quelqu'un.

0
dcode

C'est ce que je fais pour résoudre ce problème.

Assume that your web server has already write access to session directory, in my case 'app/storage/framework/sessions/'.

Execute,

$ rm -f {your_web_app}/storage/framework/sessions/*

Reload web in your browser and try to login again.
0
Samuel Deschamps

Résolu le problème:

Lorsque j’ai vérifié l’app.blade csrf-token était codé en dur comme <meta content="9DB/rSl5JKAkQenkfGLj4o/x6+1dIDC5m52IWJxjFfo=" name="csrf-token"> après avoir supprimé ceci et ajouté <meta content="authenticity_token" name="csrf-param"> corrigé mon problème. Cela peut aider quelqu'un :)

0
Kiren Siva

Il y a beaucoup de possibilités qui peuvent causer ce problème. Ce que j’expérimente, c’est que cela peut être un problème de configuration incorrecte du fichier de configuration session.php . Avez-vous déjà modifié votre fichier de configuration session.php? Peut-être avez-vous changé la valeur de domain de null à votre nom de site ou à quoi que ce soit d'autre dans session.php

'domaine' => null,

Une mauvaise configuration dans ce fichier peut provoquer ce problème.

0
Yasir Ijaz