django-registration 在登录时不对用户进行身份验证
djano-registration not authenticating users on login
我正在使用(兼容的)自定义用户模型。 django-registration 的注册部分运行良好。但是,当我将用户从导航栏带到登录页面时,用户从未真正经过身份验证。如果我输入错误的密码,它会正确通过并出错,但是当用户名和密码正确时,用户只是被重定向到正确的页面,只是没有经过身份验证。
我的register/urls.py
:
urlpatterns = [
# a custom RegistrationForm that works perfectly
url(r'^register/$',
RegistrationView.as_view(form_class=GeneralUserForm),
name='registration_register'),
url(r'^', include('registration.backends.hmac.urls')),
]
我的register/templates/registration/login.html
:
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="{% trans 'Log in' %}" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
<p>{% trans "Forgot password" %}? <a href="{% url 'auth_password_reset' %}">{% trans "Reset it" %}</a>!</p>
<p>{% trans "Not member" %}? <a href="{% url 'registration_register' %}">{% trans "Register" %}</a>!</p>
{% endblock %}
来自 settings.py
的相关片段:
# Setting custom User Model
AUTH_USER_MODEL = 'register.GeneralUser'
# for guardian to work
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', # this is default
'guardian.backends.ObjectPermissionBackend',
)
# Setting limit on days
ACCOUNT_ACTIVATION_DAYS = 7
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
奥卡姆剃刀,永远如此。
我的问题要简单得多:
{% if user.authenticated %} # should simply be user.is_authenticated
<li>Welcome {{ user.username }}</li>
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Logout</a></li>
{% else %}
<li class="active"><a href="#">Home</a></li>
<li><a href="/accounts/register">Register</a></li>
<li><a href="/accounts/login">Login</a></li>
<li>Welcome {{ user.date_joined }}</li>
{% endif %}
我正在使用(兼容的)自定义用户模型。 django-registration 的注册部分运行良好。但是,当我将用户从导航栏带到登录页面时,用户从未真正经过身份验证。如果我输入错误的密码,它会正确通过并出错,但是当用户名和密码正确时,用户只是被重定向到正确的页面,只是没有经过身份验证。
我的register/urls.py
:
urlpatterns = [
# a custom RegistrationForm that works perfectly
url(r'^register/$',
RegistrationView.as_view(form_class=GeneralUserForm),
name='registration_register'),
url(r'^', include('registration.backends.hmac.urls')),
]
我的register/templates/registration/login.html
:
{% extends "base.html" %}
{% load i18n %}
{% block content %}
<form method="post" action=".">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="{% trans 'Log in' %}" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
<p>{% trans "Forgot password" %}? <a href="{% url 'auth_password_reset' %}">{% trans "Reset it" %}</a>!</p>
<p>{% trans "Not member" %}? <a href="{% url 'registration_register' %}">{% trans "Register" %}</a>!</p>
{% endblock %}
来自 settings.py
的相关片段:
# Setting custom User Model
AUTH_USER_MODEL = 'register.GeneralUser'
# for guardian to work
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend', # this is default
'guardian.backends.ObjectPermissionBackend',
)
# Setting limit on days
ACCOUNT_ACTIVATION_DAYS = 7
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
奥卡姆剃刀,永远如此。
我的问题要简单得多:
{% if user.authenticated %} # should simply be user.is_authenticated
<li>Welcome {{ user.username }}</li>
<li class="active"><a href="#">Home</a></li>
<li><a href="#">Logout</a></li>
{% else %}
<li class="active"><a href="#">Home</a></li>
<li><a href="/accounts/register">Register</a></li>
<li><a href="/accounts/login">Login</a></li>
<li>Welcome {{ user.date_joined }}</li>
{% endif %}