Laravel 5.1 Ajax CSRF Sorunu

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. :)


Kategoriler: Laravel Jquery