2015-10-25 14 views
7

Odpowiedni kod znajduje się poniżej:laravel 5,1 XMLHttpRequest AJAX POST TokenMismatchException

var csrfToken = "{{ csrf_token() }}"; 
xmlhttp.open("POST", "/internal/v1/create/strategy", true); 
xmlhttp.setRequestHeader('X-CSRF-TOKEN', csrfToken); 
postString = "param1=" + varOne + "&param2=" + varTwo; 
xmlhttp.send(postString); 

Próbowałem dowiedzieć się tego przez kilka godzin teraz, szczerze mówiąc nie mam pojęcia co zrobić w tym momencie. Zauważ, że jeśli używam metody formularza, wszystko działa dobrze. Próbowałem także wysyłania token CSRF jako parametr w postString: „_token =” + csrfToken

+0

Czy próbowałeś z 'X-XSRF-TOKEN'? – Iamzozo

+0

Czy próbowałeś debugować żądanie wpisu, aby sprawdzić, czy nagłówki rzeczywiście są transmitowane? Ponadto nie widzę sposobu, w jaki tworzysz obiekt xmlhttp. – Tim

+0

Obiekt xmlhttp jest tworzony normalnie wcześniej w kodzie, ale udało mi się naprawić kod. Występowały tu dwa problemy, w pliku config/session.php domena była ustawiona na null, czytałem gdzieś, że to musi być ustawione, albo powoduje błędy, tak zrobiłem, ale dodatkowo musiałem włączyć zawartość -typ jako forma zakodowana w adresie URL. – jrgilman

Odpowiedz

2

Problem został rozwiązany poprzez rozwiązanie dwuczęściowym:

Należało by dodać Content” wpisać”nagłówek dla laravel aby móc odczytać parametry POST'ed:

xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 

Dodatkowo w config/session.php złożyć konieczne było również punkt«domena zmienna»w kierunku rzeczywistej domenie aplikacja, a nie domyślna wartość null. Jest to prawdopodobnie coś, co zostało zrobione podczas początkowej konfiguracji, ale musiałem o tym zapomnieć.

Po wprowadzeniu obu tych zmian, żądanie POST pomyślnie przejdzie przez połączenia AJAX.