时间:2011-08-14 15:41:44

标签: iphone python django ios django-csrf

我正在开发一个与我的Django应用程序交互的刚刚学习的iOS应用程序。

我正在登录部分:由于csrf保护,我的客户端无法登录Django应用程序。

对于其他观点,我只会添加csrf_exempt装饰器以禁用它,但对于内置django.contrib.auth.views.login

2 个答案:

答案 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 %}