gpt4 book ai didi

Django (DRF) & React - Forbidden (CSRF cookie not set)

转载 作者:行者123 更新时间:2023-12-03 22:30:59 30 4
gpt4 key购买 nike

有几十个问题与我要问的问题基本相同。但是,他们的答案似乎都不适合我。

我有一个 React 前端,我正在使用 axios向后端发送请求。例子const request = await axios.post('${BASE_URL}/logout/')
大多数 Django Rest Framework 端点都是使用 ViewSet 制作的。但是,我有一些是自定义的,主要用于身份验证。

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 获取一个 CSRF token ,它存储在 cookie 中,我需要在每个请求的 header 中传递它。有些答案说我需要做的就是配置 axios,例如
axios.defaults.xsrfHeaderName = "X-CSRFTOKEN";
axios.defaults.xsrfCookieName = "XCSRF-TOKEN";

它会“正常工作”。我试过调整我的 CSRF_COOKIE_NAME到各种值也可以使其工作。

有些回答甚至说要保留 @csrf_exempt但这听起来是一个非常非常糟糕的主意。

我真的需要生成/获取 CSRF cookie 吗?我是否将其包含在每个请求中?还是只是axios的一个配置?

最佳答案

我曾经遇到过这个问题,我正在使用 token 身份验证。我就是这样解决的。但不确定这是否是最好的主意。我只为此 View 使用了 csrf_exempt,所有其他 View 都是 View 集。

@csrf_exempt
def get_current_user(request, *args, **kwargs):
if request.method == 'GET':
user = request.user
serializer = UserDataSerializer(user)
return JsonResponse(serializer.data, safe=False)

我在 settings.py 中的中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
# 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.locale.LocaleMiddleware',
'oauth2_provider.middleware.OAuth2TokenMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'auditlog.middleware.AuditlogMiddleware',
]

关于Django (DRF) & React - Forbidden (CSRF cookie not set),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54321554/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com