来自 React Native 的获取 API 调用中的 csrf 问题
csrf issue in fetch API call from react native
我正在使用 react-native 移动应用程序中的以下代码对 dj-rest-auth local link 进行社交身份验证调用。然而,我的 Facebook 身份验证每次都成功,然后执行 fetch(或 axios)本地 API 调用,它在第一个 time/run 返回我的令牌时完美运行,但此后每隔一次运行,它给了我一个错误说缺少或无效的 csrf 令牌。我不能使用 Django docs getCookie 函数,因为它给出了文档错误,因为这是一个反应原生的移动应用程序。请指导如何从移动应用程序使用 csrf 正确地进行 API 调用,使用下面的代码(在异步函数中):
fetch(
"http://192.168.1.102:8080/dj-rest-auth/facebook/",
{
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type':'application/json',
},
xsrfCookieName:"csrftoken",
xsrfHeaderName:'X-CSRFToken',
body:JSON.stringify({access_token:resolvedToken})
}
)
.then(resp => resp.json())
.then(data => {
console.log(data);
}
)
.catch(error => console.log(error))
注销功能也给出了丢失或无效的csrf错误,写在下面供参考:
async function Logout() {
fetch(
"http://192.168.1.102:8080/dj-rest-auth/logout/",
{
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type':'application/json',
},
xsrfCookieName:"csrftoken",
xsrfHeaderName:'X-CSRFToken'
}
)
.then(resp => resp.json())
.then(data => {console.log(data)})
.catch(error => console.log(error))
}
上述问题已通过从 settings.py 中的默认 REST 身份验证 类 中删除“会话身份验证”并保持启用“基本身份验证”和“令牌身份验证”来解决。
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.TokenAuthentication',
来源:https://github.com/Tivix/django-rest-auth/issues/164#issuecomment-860204677
我正在使用 react-native 移动应用程序中的以下代码对 dj-rest-auth local link 进行社交身份验证调用。然而,我的 Facebook 身份验证每次都成功,然后执行 fetch(或 axios)本地 API 调用,它在第一个 time/run 返回我的令牌时完美运行,但此后每隔一次运行,它给了我一个错误说缺少或无效的 csrf 令牌。我不能使用 Django docs getCookie 函数,因为它给出了文档错误,因为这是一个反应原生的移动应用程序。请指导如何从移动应用程序使用 csrf 正确地进行 API 调用,使用下面的代码(在异步函数中):
fetch(
"http://192.168.1.102:8080/dj-rest-auth/facebook/",
{
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type':'application/json',
},
xsrfCookieName:"csrftoken",
xsrfHeaderName:'X-CSRFToken',
body:JSON.stringify({access_token:resolvedToken})
}
)
.then(resp => resp.json())
.then(data => {
console.log(data);
}
)
.catch(error => console.log(error))
注销功能也给出了丢失或无效的csrf错误,写在下面供参考:
async function Logout() {
fetch(
"http://192.168.1.102:8080/dj-rest-auth/logout/",
{
method: "POST",
headers: {
'Accept': 'application/json',
'Content-Type':'application/json',
},
xsrfCookieName:"csrftoken",
xsrfHeaderName:'X-CSRFToken'
}
)
.then(resp => resp.json())
.then(data => {console.log(data)})
.catch(error => console.log(error))
}
上述问题已通过从 settings.py 中的默认 REST 身份验证 类 中删除“会话身份验证”并保持启用“基本身份验证”和“令牌身份验证”来解决。
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.TokenAuthentication',
来源:https://github.com/Tivix/django-rest-auth/issues/164#issuecomment-860204677