2016-09-11 159 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') 
      } 
      });