2016-11-14 148 views
1

我需要理解爲什麼post請求會造成TokenMismatchException。 我試過沒標準溶液添加TokenMismatchException laravel 5.3

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

headers: {'X-CSRF-Token': $('meta[name=csrf_token]').attr('content')} 

但是當我點擊提交按鈕,鍍鉻控制檯日誌告訴我

的jquery.js:8625 POST http://local.game/play 500(內部服務器錯誤)send @ jquery.js:8625ajax @ jquery.js:8161(匿名函數)@index.js:10dispatch @jquery.js:4430r.handle @jqu ery.js:4116

在此先感謝

這是錯誤

Whoops, looks like something went wrong. 

1/1 
TokenMismatchException in VerifyCsrfToken.php line 68: 
in VerifyCsrfToken.php line 68 
at VerifyCsrfToken->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in ShareErrorsFromSession.php line 49 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in StartSession.php line 64 
at StartSession->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in AddQueuedCookiesToResponse.php line 37 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in EncryptCookies.php line 59 
at EncryptCookies->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104 
at Pipeline->then(object(Closure)) in Router.php line 644 
at Router->runRouteWithinStack(object(Route), object(Request)) in Router.php line 618 
at Router->dispatchToRoute(object(Request)) in Router.php line 596 
at Router->dispatch(object(Request)) in Kernel.php line 267 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) in Pipeline.php line 53 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in CheckForMaintenanceMode.php line 46 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) in Pipeline.php line 137 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) in Pipeline.php line 33 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) in Pipeline.php line 104 
at Pipeline->then(object(Closure)) in Kernel.php line 149 
at Kernel->sendRequestThroughRouter(object(Request)) in Kernel.php line 116 
at Kernel->handle(object(Request)) in index.php line 53 

這是我現在的JS

$(document).ready(function() { 
    $('.login-input').on('focus', function() { 
     $('.login').addClass('focused'); 
    }); 

    $('.login').on('submit', function (e) { 
     e.preventDefault(); 
     var data = $('.login-input').val(); 
     var token = $('#token').val(); 
     $('.login').removeClass('focused').addClass('loading'); 
     $.ajax({ 
      headers: {'X-CSRF-Token': $('meta[name=csrf_token]').attr('content')}, 
      type: 'POST', 
      url: '/play', 
      data: JSON.stringify({'data': data, "_token": token}), 
      contentType: 'application/json', 
      dataType: 'array' 
     }); 
    }); 
}); 

xhr.send(options.hasContent && options.data || null); 

這是錯誤的行

+1

你在哪裏看到'TokenMismatchException'錯誤? –

+0

所以,我有一個用戶用來插入他的名字和播放按鈕的登陸頁面。點擊播放按鈕後,我將控件傳遞給使用url進行ajax調用的js:「/ play」。在laravel web.php文件中,我添加路由Route :: post('/ play','provaController @ index'); –

+1

我的意思是在發佈的錯誤中沒有'TokenMismatchException'錯誤。 –

回答

0

你可以在ajax請求中使用t帽子你有:

$.ajax({ 
    type: 'POST', 
    url: '/<url>', 
    data: JSON.stringify({id: '<?php echo $job->id?>', "_token": "{{ csrf_token() }}",}), 
    contentType: 'application/json', 
    dataType: 'json', 
}); 

所以,你的數據就會像

id: something, 
_token: <the actual token> 

你不需要做JSON

這裏是到CSRF documentation部分

+0

OP已經通過'頭︰{'X-CSRF-令牌':$('元[ name = csrf_token]')。attr('content')}'在ajax請求中。 –

0

你」的鏈接,在您的網頁中使用雙重標記嘗試移除其中一個標記,請使用meta標記並從文檔中移除#token,例如:

$.ajax({ 
    headers: {'X-CSRF-Token': $('meta[name=csrf_token]').attr('content')}, 
    type: 'POST', 
    url: '/play', 
    data: JSON.stringify({'data': data}), 
    contentType: 'application/json', 
    dataType: 'array' 
}); 

或在文檔中刪除元只是#token

$.ajax({ 
    type: 'POST', 
    url: '/play', 
    data: JSON.stringify({'data': data, "_token": token}), 
    contentType: 'application/json', 
    dataType: 'array' 
}); 

希望這有助於。

+0

沒有什麼改變 –

相關問題