当前位置: 首页 > 知识库问答 >
问题:

在飞行前响应中不允许Laravel前端到Django后端x-csrf-token

杨晓博
2023-03-14
let url = "http://localhost:8000/leadmanager/api/lead/";
axios.get(url)
    .then(res => console.log(res.data))
    .catch(error => console.log(error));

最初我得到了这个错误:

CORS策略阻止从来源“http://test.net”访问位于“http://localhost:8000/leadmanager/api/lead/”的XMLHttpRequest:对飞行前请求的响应未通过访问控制检查:请求的资源上没有“access-control-allog-origin”标头。

因此,我检查了文档,安装了django-cors-headers,并在cors_origin_whitelist中包含了Laravel网站的url。

CORS_ORIGIN_WHITELIST = [
    "http://test.net"
]
CORS_ALLOW_HEADERS = [
    'x-csrftoken'
]



CSRF_TRUSTED_ORIGINS = [
    'http://test.net'
]

那么,如何配置Django的后端以允许来自Laravel的请求附加X-CSRF-Header?我不想修改Laravel的设置来不附加这些头文件,因为它们是Laravel为减轻CSRF攻击而实现的一个安全特性。

共有1个答案

仲浩歌
2023-03-14

在参考@bak2trak指出的https://stackoverflow.com/a/32501365/10888237之后,我检查了Laravel应用程序从Chrome开发者控制台(Network选项卡)发出的请求头,请求头是“x-csrf-token和x-request-with”。因此,我修改cors_allow_headers以添加“x-requested-with”标头。

CORS_ALLOW_HEADERS = [
    'x-csrf-token',
    'x-requested-with'
]

它给出了一个不同的错误401[未授权],因此我删除了REST_Framework的默认身份验证类。

现在,请求终于可以通过了,我从Django后端获得了对Laravel的get请求的适当响应。

 类似资料: