web-dev-qa-db-fra.com

Laravel Incompatibilité de X-CSRF-Token avec POSTMAN

J'essaie de parler à mon API REST construite avec Laravel. Mais l'appel avec POSTMAN est rejeté en raison d'une incompatibilité de jeton. Je suppose que je dois inclure le jeton CSRF dans l'en-tête. Mais ai-je besoin de celui crypté? Lorsque j'insère ce jeton, je vois toujours l'erreur qu'il y a une incompatibilité de jeton.

Je récupère mon jeton en utilisant:

$encrypter = app('Illuminate\Encryption\Encrypter');
$encrypted_token = $encrypter->encrypt(csrf_token());
return $encrypted_token;

mais est-ce censé changer à chaque rafraîchissement?

10
sesc360

Si vous n'utilisez pas de formulaires - pour une API par exemple -, vous pouvez suivre les étapes décrites ici https://Gist.github.com/ethanstenis/3cc78c1d097680ac7ef0 :

Essentiellement, ajoutez ce qui suit à votre en-tête de lame ou de brindille

<meta name="csrf-token" content="{{ csrf_token() }}">

Installez Postman Interceptor s'il n'est pas déjà installé et allumez-le

Ensuite, dans votre navigateur, connectez-vous au site (vous devez être autorisé) et inspectez l'élément ou visualisez la source pour récupérer le jeton.

Dans Postman, définissez GET/POST, etc. selon vos besoins et dans votre en-tête, créez une nouvelle paire.

X-CSRF-TOKEN        tokenvaluetobeinserted235kwgeiOIulgsk

Certaines personnes recommandent de désactiver le jeton CSRF lors du test de l'API, mais vous ne le testez pas vraiment.

Si vous constatez toujours des erreurs, vérifiez la réponse en utilisant preview car Laravel tend à être assez explicite avec ses messages d'erreur. Si rien ne revient, vérifiez votre php_error.log (quel que soit son nom).


ps Oct 2018 - Je suis maintenant utilisateur Laravel Passeport pour la gestion de l'enregistrement des API, des connexions et des jetons utilisateur - ça vaut le coup d'oeil!

10
brianlmerritt

Oui, cela change à chaque rafraîchissement. Vous devriez le mettre dans la vue et lorsque vous postez, il doit être envoyé comme valeur de "_token" POST var.

Si vous utilisez simplement un POSTstandard _, ajoutez-le simplement au formulaire:

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">

Si vous utilisez AJAX, assurez-vous de saisir la valeur de _token et de la transmettre avec la demande.

REF: http://laravel.com/docs/5.1/routing#csrf-protection

3
James Taylor

Utilisez Postman
Envoyez une requête GET à toute page contenant
<meta name="csrf-token" content="{{ csrf_token() }}">
Copiez la valeur de la réponse.

Ajoutez un champ d’en-tête à votre demande POST:

"X-CSRF-TOKEN: "copied_token_in_previous_get_response"
0
Katsum0to