通过 API 的 Django 身份验证
Django Authentication through API
我想提供一些API比如通过ReactJS接口登录和注销。我看到 Django 文档 here accounts/ 提供了一些 url,例如登录和注销。是否有可能我只是利用 accounts/ 下的登录和注销 api 而无需创建模板并在 Postman 中试用它们?我尝试使用 POST 请求:
{
"username": "admin",
"password": "admin"
}
和带有 csrfmiddlewaretoken 和 csrftoken 的 cookie 但出现错误 Forbidden (CSRF token missing or incorrect.): /accounts/login/
至于使用in-built Django 表单进行身份验证,不能通过传递JSON 数据来完成。相反,最好创建自己的 API 端点和 return 客户端的某种身份验证令牌以用于将来的请求。在这种情况下,您可能不需要 CSRF 令牌。
或者,您可以在 Django 页面中托管您的 React 应用程序,并使用 Django 进行身份验证,在这种情况下,您不需要处理令牌,因为 Django 会为您处理。但这不是一种非常常见的方法,可能并非在所有情况下都有效。
至于注入 CSRF 令牌,当您使用 ReactJS 时,有几种不同的方法可以做到这一点
在 React/Axios
中处理 CSRF 令牌
对于 Axios 客户端,您有三种选择:
- 您可以在每个 Axios 调用的 header 中手动附加 CSRF 令牌
- 您可以为每个调用使用 Axios xsrfHeaderName
- 您可以使用默认的 xsrfHeaderName (axios.defaults.xsrfHeaderName = "X-CSRFToken")
以下是无需任何进一步配置即可简单地将 CSRF 令牌与 Axios 一起使用的方法:
import axios from 'axios';
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'
在 React/Fetch
中处理 CSRF 令牌
fetch(url, {
credentials: 'include',
method: 'POST',
mode: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken
},
body: {}
})
}
使用 React/Redux
处理 CSRF
如果您使用 Redux 来管理您的应用程序状态,您可以使用 redux-csrf 在 Redux 中处理 CSRF 令牌。
您可以先使用
从 npm 安装它
npm install redux-csrf --save
然后就可以使用setCsrfToken(token)
API在Redux store中设置CSRF token了
我想提供一些API比如通过ReactJS接口登录和注销。我看到 Django 文档 here accounts/ 提供了一些 url,例如登录和注销。是否有可能我只是利用 accounts/ 下的登录和注销 api 而无需创建模板并在 Postman 中试用它们?我尝试使用 POST 请求:
{
"username": "admin",
"password": "admin"
}
和带有 csrfmiddlewaretoken 和 csrftoken 的 cookie 但出现错误 Forbidden (CSRF token missing or incorrect.): /accounts/login/
至于使用in-built Django 表单进行身份验证,不能通过传递JSON 数据来完成。相反,最好创建自己的 API 端点和 return 客户端的某种身份验证令牌以用于将来的请求。在这种情况下,您可能不需要 CSRF 令牌。
或者,您可以在 Django 页面中托管您的 React 应用程序,并使用 Django 进行身份验证,在这种情况下,您不需要处理令牌,因为 Django 会为您处理。但这不是一种非常常见的方法,可能并非在所有情况下都有效。
至于注入 CSRF 令牌,当您使用 ReactJS 时,有几种不同的方法可以做到这一点
在 React/Axios
中处理 CSRF 令牌对于 Axios 客户端,您有三种选择:
- 您可以在每个 Axios 调用的 header 中手动附加 CSRF 令牌
- 您可以为每个调用使用 Axios xsrfHeaderName
- 您可以使用默认的 xsrfHeaderName (axios.defaults.xsrfHeaderName = "X-CSRFToken")
以下是无需任何进一步配置即可简单地将 CSRF 令牌与 Axios 一起使用的方法:
import axios from 'axios';
axios.defaults.xsrfCookieName = 'csrftoken'
axios.defaults.xsrfHeaderName = 'X-CSRFToken'
在 React/Fetch
中处理 CSRF 令牌fetch(url, {
credentials: 'include',
method: 'POST',
mode: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken
},
body: {}
})
}
使用 React/Redux
处理 CSRF如果您使用 Redux 来管理您的应用程序状态,您可以使用 redux-csrf 在 Redux 中处理 CSRF 令牌。
您可以先使用
从 npm 安装它npm install redux-csrf --save
然后就可以使用setCsrfToken(token)
API在Redux store中设置CSRF token了