在我的laravel 5.3应用程序中,我已为所有ajax请求全局启用CSRF检查。
$.ajaxSetup({
headers: { 'X-CSRF-Token' : $('meta[name=_token]').attr('content') }
});
但是我有一个外部api的ajax GET请求如下。
$.ajax({
url: "https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY,
type: "GET",
dataType: "text",
success: function (data) {
},
error: function (msg) {
}
});
我需要在这里避免CSRF检查。我试过两种方法,但没有什么对我有用。在VerifyCsrfToken.php
中
第一路
class VerifyCsrfToken extends BaseVerifier
{
protected $except = [
'https://api.xxxxxxxxx/v1/*'
];
}
第二路
class VerifyCsrfToken extends BaseVerifier
{
if ( ! $request->is('https://api.xxxxxxxxx/v1/*'))
{
return parent::handle($request, $next);
}
return $next($request);
}
请弄明白,如何解决这个问题。
答案 0 :(得分:1)
最后,我在javascript
内找到了一条路。我们可以在ajax
调用之前删除特定标头,然后再次重新分配标头。
delete $.ajaxSettings.headers["X-CSRF-Token"];
$.ajax({
url: "https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY,
type: "GET",
dataType: "text",
success: function (data) {
},
error: function (msg) {
}
});
$.ajaxSettings.headers["X-CSRF-Token"] = $('meta[name=_token]').attr('content');
答案 1 :(得分:0)
您可以像这样覆盖ajaxSetup
来电中的ajax
。
$.ajax({
url: "https://api.xxxxxxxxxxx/v1/" +code+ "?api_key="+API_KEY,
type: "GET",
dataType: "text",
headers : {},
success: function (data) {
},
error: function (msg) {
}
});
虽然,您不应该使用ajaxSetup
。
此处指定的设置将影响对$ .ajax或基于Ajax的衍生产品(如$ .get())的所有调用。 这会导致不良行为,因为其他呼叫者(例如,插件)可能需要正常的默认设置。出于这个原因,我们强烈建议不要使用此API。相反,在调用中显式设置选项或定义一个简单的插件来执行此操作。 :https://api.jquery.com/jquery.ajaxsetup/
答案 2 :(得分:0)
这应该有帮助
{{1}}