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


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)