Laravel 5.1 Ajax CSRF Sorunu
10-09-2015 Okuma Modu
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.
$.ajax({
url: "adres",
type: "POST",
data: {'_token': $('input[name="_token"]').val(),'username': "rizagunes"},
success: function(data){
console.log(data);
}
});
Bir yöntem daha var o da CSRF kontrolünü kapatmak fakat böyle bir durumda sitenizin güvenliği azalacağından uygulamanızı tavsiye etmiyorum.
Kendinize iyi bakın. :)