我正在开发一个与我的Django应用程序交互的刚刚学习的iOS应用程序。
我正在登录部分:由于csrf保护,我的客户端无法登录Django应用程序。
对于其他观点,我只会添加csrf_exempt
装饰器以禁用它,但对于内置django.contrib.auth.views.login
?
答案 0 :(得分:5)
在现代Django中(最后在1.11上测试过),禁用CSRF检查的一种方法是继承LoginView
并覆盖其dispatch
方法,该方法用csrf_protect
明确修饰( as seen here)。
产生的CBV符合以下方式:
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)
See the entire urls.py
file here.
我们的想法是复制完全相同的方法,同时用csrf_protect
替换csrf_exempt
。可能有一种更简洁的方法,例如,使用undecorated。
答案 1 :(得分:0)
在您的模板中:users / login.html您需要修改的POST行包括:
{% csrf_token %}
即:
<form action="{{ app_path }}" method="post" id="login-form">{% csrf_token %}