2016-09-11 158 views
1

我正在將我的laravel 4應用升級到laravel 5.2,並且有很多事情我必須在我的代碼中重新考慮。其中之一是請求的CSRF事情。我無法弄清楚如何在我的路線文件中正確處理它。 當然,我也包括在我看來,對於CSRF元:爲POST ajax請求獲取404未找到錯誤Laravel 5.2

<meta name="csrf-token" content="{{ csrf_token() }}" /> 

我的路線文件:

Route::post('/edituser', '[email protected]'); 

我的腳本:

var _token = $('meta[name="csrf-token"]').attr('content'); 

function triggerEditUser(id){ 
    $.post(_token+'/edituser',{id:id},function(data){ 
     if(data){ 
      console.log(data); 
     } 
    }); 
} 

我的控制器:

public function toEditUser(){ 
     if(Request::ajax()){ 
      $user = User::find(Input::get('id')); 
      return Response::json($user); 
     } 
    } 

我是GE擬合的錯誤消息:

http://mysite.local/kg9VLUc0QWP59AqSP0OCPWjwsWPg33ypZ47FecRC/edituser 404 (Not Found) 
+0

你肯定'''kg9VLUc0QWP59AqSP0OCPWjwsWPg33ypZ47FecRC'''在你的URL路徑? –

+0

我想你應該通過標題或作爲數據的csrf標記 – jaysingkar

回答

0

可能是您的解決方案將類似於

$.post('/edituser',{id:id, token:_token},function(data){ 

代替

$.post(_token+'/edituser',{id:id},function(data){ 
0

給出Laravel documentation,你應該使用頭文件發送csrf令牌。

$.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     } 
}); 

$.post('/edituser',{id:id,_token:_token},function(data){ 
     if(data){ 
      console.log(data); 
     } 
    }); 

另外,您還可以發送令牌作爲數據

+0

我仍然收到郵政http://mysite.local/edituser 500(內部服務器錯誤)與此代碼 –

+0

好。你能否在開發者工具中檢查xhr,檢查你得到的迴應是什麼? – jaysingkar

0

只是爲了測試,並告訴我答案。 在您的控制器改變

public function toEditUser(){ 
     if(Request::ajax()){ 
      $user = User::find(Input::get('id')); 
      return Response::json($user); 
     } 
    } 

通過

public function toEditUser(){ 
     if(Request::ajax()){ 
      $user = User::find(Input::get('id')); 

     foreach ($user as $u) { 
      $users[]=$result->yourcolumn; 
     } 

      return $users; 
     } 
    } 

,並添加

$.ajaxSetup({ 
      headers: { 
       'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
      } 
      });