我无法使用有效的用户名和密码登录django-admin。当我将db从sqlite更改为postgresql时,问题就开始了。
我尝试通过./manage.py createsuperuser
创建新用户,但没有变化。从pgAdmin III我可以看到用户被正确创建,is_staff
和is_superuser标志都是真的。
我正在使用Django 1.6,并通过南方创建我的迁移。
更新:我编辑了auth后端以接受通过电子邮件登录。我也在另一个项目中使用这个脚本并在那里工作。让我知道你的想法。
backend.py
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class EmailAuthenticationBackend(ModelBackend):
"""
Authenticate against django.contrib.auth.models.User using
e-mail address instead of username.
"""
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(email__iexact = username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
settings.py
AUTHENTICATION_BACKENDS = ('project.apps.account.backend.EmailAuthenticationBackend', )
数据库设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'cloudapp',
'USER': 'clouduser',
'PASSWORD': 'my_password',
'HOST': 'localhost',
'PORT': '',
}
}
答案 0 :(得分:0)
我认为用自己的身份替换所有身份验证后端并不是一个好主意。 您可以同时拥有多个后端:
AUTHENTICATION_BACKENDS = ('project.apps.account.backend.EmailAuthenticationBackend', 'django.contrib.auth.backends.ModelBackend',)
因此,管理员可以使用用户名/密码登录,并且在您的自定义登录页面上,用户将能够通过电子邮件/密码登录。