我在使用AJAX PUT请求的应用程序中使用了RESTfull api,如下所示:
$.ajax({
method: "PUT",
url: "/device/{{ $client->id }}",
async: false,
data: {
javascript_enabled: $('#javascript-enabled').text(),
cookies_enabled: $('#cookies-enabled').text(),
device_pixel_ratio: $('#device-pixel-ratio').text(),
screen_resolution: $('#screen-resolution').text(),
browser_window: $('#browser-window').text(),
local_time: $('#local-time').text(),
local_time_zone: $('#local-time-zone').text(),
_token: "{{ csrf_token() }}"
},
success: function(data)
{
alert('success');
},
error: function (jqXHR, textStatus, errorThrown)
{
alert( "Internal server error occurred.");
}
});当我在浏览器中启用cookies时,这段代码可以正常工作。
然而,当我禁用cookies时,我得到"TokenMismatchException“。
我已经解决了这个问题,把这一行放在"App\Http\Middleware\VerifyCsrfToken“类中:
protected $except = [
'device/*'
];有没有办法在不禁用此路由的csrf检查的情况下解决此问题?
发布于 2015-11-14 12:52:03
只有当您的请求中存在csrf令牌时,您才能对令牌进行身份验证,如果没有,则应采用以下替代方法
创建您的应用程序能够识别的自己的令牌
例如,有一个类似于custom_token的参数,您应该在
app\Http\Middleware\VerifyCsrfToken.php
提示:如果你使用print_r($request),你可以看到所有元素
您应该像这样对自定义令牌进行身份验证
$paramExist= $request->custom_token;
#return parent::handle($request, $next);
if(isset($paramExist))
{
$yourSpecialkey ='a2$%$'; #This to check whether the param has the value that you set
if($paramExist==$yourSpecialKey)
{
return $next($request);
}
else
{
return parent::handle($request, $next);
}
}
else
{
return parent::handle($request, $next);
}我已经给了你这个临时匹配,你应该使用你自己的方式来匹配/验证你的令牌。
https://stackoverflow.com/questions/33705114
复制相似问题