Erreur 419 ou 500 après une requête Ajax

Par 1Zebre, il y a 3 ans


Bonjour, j'essaie de coder un tchat simple avec Laravel et du Javascript vanilla donc j'utilise aussi AJAX.

Voici mon code.

J'ai ceci dans mon layout :

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

J'ai ce code javascript dans un fichier séparé et inclu dans la vue :

function ajoutMessage(){ let msg = document.querySelector("#text").value if(msg != ""){ let data = {} data["msg"] = msg let jSonData = JSON.stringify(data) $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); let xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if(this.readyState == 4){ if(this.status == 201){ document.querySelector("#text").value = ""; } } } xmlhttp.open('POST', 'send'); xmlhttp.send(jSonData) } }

Voici mon controlleur :

public function ajoutMessage(Request $request) { if($request->isMethod('POST')){ $donneesJson = file_get_contents('php//input'); $donnees = json_decode($donneesJson); return response()->json(["message"=>"inserted successfully"],201); }

J'ai aussi essayé d'exclure le token CSRF en le mettant en except dans le middleware verifycsrf :

protected $except = [ 'send' ];

J'obtiens au choix, une erreur 500 ou bien une erreur 419... je ne vois rien dans les logs ni d'apache ni de laravel.

Pouvez-vous m'aider svp ?

1 réponse

popotte, il y a 3 ans

Hello :) Alors le csrf dans le header ce n'est pas sufisant, tu doit aussi ajouter ce csrf dans le body:

// faut ajouter _token dans la variable jSonData data["msg"] = msg data["_token"] = "{{ csrf_token() }}", let jSonData = JSON.stringify(data)