有数十个问题与我所提问的本质相同。然而,它们的答案似乎都不能解决我的问题。
我有一个React前端,在其中使用axios
向后端发送请求。例如:
const request = await axios.post('${BASE_URL}/logout/')
大多数Django Rest Framework端点都是使用ViewSets创建的。然而,我有一些自定义端点,主要用于身份验证。
path('createaccount/', views.create_account),
path('me/', views.current_user),
path('logout/', views.logout),
path('login/', views.login),
path('resetpassword', views.reset_password),
为了开发这个项目,我在这些视图上加入了
@csrf_exempt
,因为当时我不想处理它。现在我接近部署的时间,是时候解决这个问题了。一些答案说我需要从Django获取一个在cookies中保存的CSRF令牌,并将其传递到每个请求的头部。还有一些答案说我只需要配置axios就可以了。
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";
axios.defaults.xsrfCookieName = "XCSRF-TOKEN";
它将“只是工作”。我尝试调整我的CSRF_COOKIE_NAME
的各种值,以使其工作。
一些答案甚至说要保留@csrf_exempt
,但这听起来像一个非常糟糕的主意。
我是否真的需要生成/获取CSRF cookie?我是否在每个请求中都包含它?还是它只是axios的配置?
(POST, PUT, PATCH, DELETE)
中包含CSRF
。如果是这样,请尝试从 cookie 中获取 https://github.com/js-cookie/js-cookie/ 令牌,然后发出请求。 - Raja Simon