[英]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.