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 ?
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)