[英]React native Axios Django - Csrf failed referer checking failed no referer
我正在使用 axios 从React
前端调用Django
后端 api。
对于登录 api 的那个 api,我在逻辑中使用了 Django Knox 包。
React.js - 我正在调用axios.request(method, url, data)
并且 api 调用工作正常。 当我转到Developer tools
> Network
,我可以看到Referer
标头在请求标头中设置为 React.js 网站,并且没有其他与 csrf 相关的标头。 在响应头中,我可以看到两个set-cookie
头, csrftoken
和sessionid.
React Native - 我调用 api 的方式相同,但 api 返回错误csrf failed referer checking failed - no referer
。 当我检查response.config
,与 React.js 不同,未设置Referer
标头
卷曲- 工作正常
httpie - 工作正常
我怎样才能摆脱这个错误。
注 1 - 我的 Django 后端基于 api 令牌逻辑,而不是以任何方式基于 csrf。
注 2 - React.js 和 Django 托管在不同的域上。 我在处于调试模式的 React Native 中遇到错误。
更新 1 - 在 Django settings.py 中禁用 CSRF 中间件后,现在我只得到一个 setCookie 标头(不再获得 csrftoken)但同样的错误仍然存在。
Django Rest api 需要一个 Referer 标头。
在 React.js 的情况下,它会自动设置(可能通过浏览器)并且它的值是当前网站。
但是在 React Native 的情况下,它没有设置。 所以我们必须手动设置它。
export const axiosAPICall = (method,url,data,headers) => {
let request = {
method: method,
url: url,
};
if (data) {
request['data'] = data;
}
if (headers) {
request['headers'] = headers;
}
// Referer is auto-set in react.js as same website value.
// for react-native we have to set it manually to target api:port
request['headers'] = {
...request['headers'],
Referer: url
}
return axios.request(request)
.then(res => res.data)
.catch(error => {throw error});
};
settings.py
,我评论了CSRF middleware
settings.py
,我只添加了TokenAuthentication
类来删除SessionAuthentication
。REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
]
}
注意 - 在正确了解您的要求后,请自行承担风险执行第 2 步和第 3 步。 我删除了 CSRF 中间件,因为我的 API 完全依赖于令牌进行身份验证。 我在任何方面都不需要 CSRF。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.