0

我正在尝试为客户端将旧代码从 django 1.5 升级到 1.8。该项目用于django.contrib.auth.views.login验证登录。urls.py外观如下:

urlpatterns = patterns('',
    url(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'accounts/login.html', 'authentication_form': LoginForm}, name="login"),
    url(r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'template_name': 'accounts/logged_out.html'}, name="logout"),
)

这是LoginForm课程:

class LoginForm(forms.Form):
    username = forms.CharField(label=_("Username"), max_length=120)
    password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)

    def __init__(self, request=None, *args, **kwargs):
        self.request = request
        self.user_cache = None
        super(LoginForm, self).__init__(*args, **kwargs)

    def clean(self):
        username = self.cleaned_data.get('username')
        password = self.cleaned_data.get('password')

        if self.request:
            if not self.request.session.test_cookie_worked():
                raise forms.ValidationError(_("Your Web browser doesn't appear to have cookies enabled. Cookies are required for logging in."))

        return self.cleaned_data

这是中间件的列表:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',

    'apps.facebook.middleware.FacebookMiddleware',
)

升级前可以登录,升级后就不能登录了。我收到以下非字段错误:

您的 Web 浏览器似乎没有启用 cookie。登录需要 Cookie。

如果我降级到 django 1.5,我可以再次登录。我该如何解决这个问题以及为什么登录在 django 1.8 中不起作用。

4

1 回答 1

1

从您的登录表单中删除 cookie 测试,这不是必需的。该检查已从Django 1.7(发行说明)中的Django 登录表单中删除。

您启用了 CSRF 保护,这已经确保启用了 cookie。

目前尚不清楚为什么要定义自己的登录表单,而不是使用内置表单。使用你自己的表单意味着你会遇到这样的问题,并错过像confirm_login_allowed钩子这样的新功能。

于 2016-02-15T19:12:35.710 回答