Laravel 5.1 Ajax CSRF Sorunu
10-09-2015
Laravel 5.1 sürümünde ajax ile işlem yapmaya çalıştığınızda konsolda 500 (Internal Server Error) hatasını göreceksiniz. Bunun sebebi TokenMismatchException
'dır yani bizim sayfamıza ulaşmadan önce Laravel 5 ile gelen Middleware
bizden token
istiyor. Göndermezsek de size cevap yok diyip kapatıyor kapıları.
Çözüm:
Bunun çözümü gayet basit, ajax ile göndereceğimiz verilerin yanında token da göndereceksiniz. Bu işlem 2 şekilde yapılabilir.
Öncelikle formunuza _token
isimli bir gizli input ekliyorsunuz ve değerine de laravel'in csrf_token()
fonksiyonunu ekliyorsunuz. Yani aşağıdaki kod. Eğer laravel'in form sınıfını kullanıyorsanız bu input otomatik ekleneceği için eklemenize gerek yoktur.
<input type="hidden" name="_token" value="{{ csrf_token() }}">
Sonra aşağıdaki jquery kodunu sayfanıza ekliyorsunuz.
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('input[name="_token"]').val()
}
});
Bu kod; jquery ile gerçekleştirdiğiniz tüm ajax işlemlerine token gönderir. Bir diğer yöntem ise ajax işleminize _token
anahtarınızı elinizle eklemek.