繁体   English   中英

将 django.contrib.auth.views.login 设置为 csrf_exempt

[英]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)

在此处查看整个urls.py文件。

这个想法是复制完全相同的方法,同时将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM