[英]Set django.contrib.auth.views.login as csrf_exempt
我正在开发一个与我的 Django 应用程序交互的学习型 iOS 应用程序。
我在登录部分:由于 csrf 保护,我的客户端无法登录到 Django 应用程序。
对于其他视图,我只是添加csrf_exempt
装饰器来禁用它,但是对于内置django.contrib.auth.views.login
?
在现代 Django(最后在 1.11 测试)中,禁用 CSRF 检查的一种方法是将LoginView
子类化并覆盖其dispatch
方法,该方法显式地用csrf_protect
装饰( 如此处所示)。
生成的 CBV 大致如下:
from django.contrib.auth.views import LoginView
from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponseRedirect
class DangerousLoginView(LoginView):
'''A LoginView with no CSRF protection.'''
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
if self.redirect_authenticated_user and self.request.user.is_authenticated:
redirect_to = self.get_success_url()
return HttpResponseRedirect(redirect_to)
return super(LoginView, self).dispatch(request, *args, **kwargs)
这个想法是复制完全相同的方法,同时将csrf_protect
替换为csrf_exempt
。 可能有一种更简洁的方法可以做到这一点,例如,使用undecorated 。
在您的模板中: users/login.html 您需要修改 POST 行以包括:
{% csrf_token %}
IE:
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.