gpt4 book ai didi

python - 跨域请求的 CSRF 免除 Django 身份验证密码重置 View

转载 作者:行者123 更新时间:2023-12-05 03:24:55 24 4
gpt4 key购买 nike

我有一个单独的前端和后端站点,我正试图让前端的用户重置他们的密码。我已经为他们创建了一个端点,当通过后端站点访问时它可以工作。但是当我尝试通过 Insomnia 访问端点时,我得到:

Forbidden (403)

CSRF verification failed. Request aborted.

我已将我的前端域添加到 CORS_ORIGIN_WHITELIST

class PasswordResetView(auth_views.PasswordResetView):
template_name = 'users/reset_password.html'

@method_decorator(csrf_exempt)
def dispatch(self, *args, **kwargs):
return super().dispatch(*args, **kwargs)

是否还有一些其他方法我还必须制作 csrf_exempt

最佳答案

django.contrib.auth.views.PasswordResetView装饰其 dispatch使用 csrf_protect 的方法, 其中csrf_protect = decorator_from_middleware(CsrfViewMiddleware) .

用你的 csrf_exempt 包装和实际的CsrfViewMiddleware , 我们有 csrf_protect(csrf_exempt(csrf_protect(<bound method PasswordResetView.dispatch ...>))) , 其中<bound method PasswordResetView.dispatch ...>super().dispatch .

可以简化为 csrf_protect(<bound method PasswordResetView.dispatch ...>) .

我们可以欺骗 CsrfViewMiddleware通过设置 request.csrf_processing_done = True :

class PasswordResetView(auth_views.PasswordResetView):
template_name = 'users/reset_password.html'

@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
request.csrf_processing_done = True
return super().dispatch(request, *args, **kwargs)

或者,您可以设置 super().dispatch.__wrapped__.csrf_exempt = True但这也有影响其他继承 View 类的副作用 auth_views.PasswordResetView , 自 super().dispatch.__wrapped__只是<function PasswordResetView.dispatch ...> .

关于python - 跨域请求的 CSRF 免除 Django 身份验证密码重置 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72146428/

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