我使用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.");
}
});
当我在浏览器中启用cookie时,此代码可以正常工作。
然而,当我禁用cookie时,我得到“TokenMismatchException”。
我已将此行放入“App \ Http \ Middleware \ VerifyCsrfToken”类中解决了这个问题:
protected $except = [
'device/*'
];
有没有办法解决这个问题而不禁用csrf检查这条路线?
答案 0 :(得分:1)
只有在您的请求中出现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);
}
我已经给你这个临时匹配,你将使用自己的方式来匹配/验证你的令牌。