2016-11-14 151 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

没有什么改变 –

相关问题