Laravel DecryptException - La charge utile n'est pas valide
Je vous envoie une requête AJAX post demande de retour auprès de mon Laravel de l'API et de la réception de cette erreur message vocal:
DecryptException dans compiled.php ligne 13235:
La charge utile n'est pas valide.
Je suis la lecture de la XSRF-JETON à partir du cookie et de l'envoi que le long d'une demande d'en-tête nommée X-XSRF-JETON.
Le site est totalement séparé site de la Laravel API, mais partage la même session, ce qui est pourquoi je suis à l'obtention de la valeur d'un cookie.
La chose étrange est que, de temps en temps, il fonctionne. Toutes les idées ce qui en est la cause?
- On vous envoi
XSRF-TOKEN
ouX-CSRF-TOKEN
? - Je vous envoie un nom d'en-tête: X-XSRF-JETON, la valeur est prise à partir du cookie nommé XSRF-JETON
- Envoyer la
X-CSRF-TOKEN
en-tête. LeXSRF-TOKEN
cookie n'est pas chiffré mais laravel attend leX-XSRF-TOKEN
- tête pour être chiffrés. - Checkout ce post qui peut vous aider stackoverflow.com/questions/42408177/...
- La seule chose que j'ai à disposition pour une utilisation dans les cookies, XSRF-JETON et il semble être chiffré, voici un exemple de valeur: eyJpdiI6Ikd1SFlHaGdLcFwvY0NWR2tRumu0bk9rpt0ilcj2ywx1zsi6iluwqlfmastvy3fxv0owde8xukv0cdf4zmfar21kbdjttuvyn3zsrk1fzfwvehoxmwr6ouz3u0t1ue81mlwvbhntcmz0vljhunpqejhcblhxmvrqwfv6umc9psisim1hyyi6imiyyzjkmzgxmtmxogfiodg3mtiyyzhmzje0nmfjzwuzzjg0mtmzyzblztkwngfmmzfjndy3ztc5zgvkymrjmjkifq%3D%3D
- Le laravel jeton CSRF est une valeur chiffrée en effet, mais laravel n'a pas besoin de le décrypter pour le vérifier, car il sait déjà ce que la valeur chiffrée est censé être. C'est pourquoi vous devriez l'envoyer dans le
X-CSRF-TOKEN
- tête, car ensuite il suffit de vérifier qu'il est correct. - La documentation indique ceci: Laravel stocke également le jeton CSRF dans un XSRF-JETON de cookie. Vous pouvez utiliser la valeur du cookie pour définir le X-XSRF-JETON-tête de la demande. Certains frameworks JavaScript comme Anguleux, de faire cela automatiquement pour vous. - C'est exactement ce que je fais.
Vous devez vous connecter pour publier un commentaire.
Si vous envoyez
X-XSRF-TOKEN
à partir de JavaScript, vous pouvez décoder à l'aide dedecodeURIComponent()
. Il convertit%3D
à=
.J'ai trouvé la cause du problème. Le XSRF-JETON de la valeur du cookie parfois eu un coquin personnage ajouté à la fin: '%3D " - parfois, il y en a deux sur la fin. Aucune idée de comment ils y arrivent mais quand ils sont présents, la vérification échoue.
Si vous base64_decode la valeur du cookie, vous obtenez une chaîne json qui est le voleur de caractères: '7' ajouté à la fin pour Laravel de décrypter la méthode échoue.
J'ai fini par ecrire mon propre CSRF vérifier la fonction:
J'ai eu un problème similaire, mais il semble être liée uniquement à Google Chrome. J'ai modifié EncryptCookies à jj() à chaque fois qu'il a rencontré une décrypter exception:
Étrangement, à chaque fois que j'actualise la page, parfois, le DecryptException est levée, mais la plupart du temps le rapport d'essai réussit. Quand je l'ai tester sous IE et Firefox, le rapport d'essai réussit toujours. Il semble lié à la quantité de données à ma demande, en-têtes, mais le problème est non-déterministe.