2016-03-04 117 views
1

我得到令牌不匹配异常,每件事看起来都是正确的。laravel 5.2中的TokenMismatchException ajax调用

这是我的视图代码

@extends('layouts.master') 
@section('content') 
<div class="bg"></div> 
<div class="login-sec clearfix"> 

    <h1 class="lg-logo">YOU ARE JUST ONE STEP AHEAD</h1> 
    <div class="login-box clear"> 

     <form id="websiteform" action="#"> 
      <input type="hidden" name="_token" value="{{ csrf_token() }}"> 
      <div class="col-md-12 form-field"> 
       <label for="">Project Name</label> 
       <input type="text" name="project" id="project"> 
      </div> 

      <div class="col-md-12 form-field"> 
       <label for="">Website URL</label> 
       <input type="url" name="website_url" id="website_url"> 
      </div> 

      <div class="col-md-12 form-field"> 
       <button type="submit" class="btn-green btn-large">Add Your Website</button> 
      </div> 
     </form> 

    </div> 
</div> 
@stop 

和形式源头部和页脚是

<head> 
    <meta charset="utf-8"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge"> 
<title></title> 
<meta name="csrf-token" content="4ryCSznz0mPSBcwXvbmZZHkZGcxZpyDy2dQ1VAoc" /> 
<link href="http://localhost:8080/css/bootstrap.min.css" rel="stylesheet" media="screen"> 

<script src="http://localhost:8080/js/jquery.min.js"></script> 
<script src="http://localhost:8080/js/bootstrap.min.js"></script> 
<script src="http://localhost:8080/js/main.js"></script> 

和main.js我的AJAX调用

$(document).ready(function() { 

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 
$('#websiteform').submit(function(e){ 
    e.preventDefault(); 
    var pro=$('#project').val(); 
    var url=$('#website_url').val(); 

    $.ajax({ 
     type: "POST", 
     url: "project_save", 
     data: {project: pro, url: url}, 
     success: function(data) 
     { 
      if(data.success==false) 
      { 
      alert(data.error); 
      } 
      else{ 
       window.location = "dashboard"; 
      } 
     }, 
     error:function(){} 
    }); 
}); 
}); 

和路由和控制器功能

Route::post('/project_save','[email protected]_save'); 
    public function project_save() 
{ 
    if(Request::ajax()){ 

     $validator = Validator::make(Request::all(), [ 
      'project' => 'required|max:255', 
      'url' => 'required', 
     ]); 
     if($validator->fails()){ 
      return Response::json(['success'=>false,'error'=>$validator->errors()->toArray()]); 
     } 

     $Website = new Website; 
     $Website->project_name = Request::get('project'); 
     $Website->website_url = Request::get('url'); 
     $Website->user_id = Auth::id(); 
     $Website->save(); 
     return Response::json(['success'=>true]); 
    } 

} 

这是我的代码和我收到tokenmismatach exeption。

+0

删除输入隐藏字段csrf_token和检查 – sanu

+0

那场是没有必要的,但它不会打破AJAX调用 –

+0

我删除,但同样的问题.. –

回答

0

更改\App\Http\Middleware\VerifyCsrfToken.php,添加此代码的功能tokensMatch

if ($request->ajax()) { 
     return true; 
    } 
+0

你正在建议禁用检查,而不是修复他的特定情况 –

+0

它不正确的答案兄弟,因为每当请求是ajax它会返回真正的礼仪? – sanu

+0

是的,跳过所有的AJAX请求 –

0

试试这个

$_token = "{{ csrf_token() }}"; 
$.post('myurl', { param1: $param1, param2: $param2, _token: $_token }) 
    .done(function(data) 
{ 
    console.log('Done!'); 
}); 
+0

不,它没有帮助...同名问题令牌错配... :-( –

+0

检查这个,让我知道 – sanu

+0

我在哪里粘贴此代码??? –

0

如果你不想为一个特定的URL CSRF保护,那么您可以在App\Http\Middleware\VerifyCsrfToken.php添加网址像这样

protected $except = [ 
    "project_save" 
]; 
0

Car请仔细检查以下内容:

我有类似的问题,这是一个简单的修复。如果您使用的是HTML表单提交(不AJAX)

<script type="text/javascript"> 
     $.ajaxSetup({ 
     headers: { 
      'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
     } 
     }); 
    </script> 

那么:在您的HTML meta标签区域

补充一点:

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

然后在你的JQuery参考,添加以下代码你需要把:

{{ csrf_field() }} 

在你的窗体标签。

相关问题