来自 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