2016-03-04 41 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() }} 

在你的窗體標籤。

相關問題