无法登录django

时间:2014-08-12 05:40:21

标签: python django postgresql

我无法使用有效的用户名和密码登录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': '',
        }
    }

1 个答案:

答案 0 :(得分:0)

我认为用自己的身份替换所有身份验证后端并不是一个好主意。 您可以同时拥有多个后端:

AUTHENTICATION_BACKENDS = ('project.apps.account.backend.EmailAuthenticationBackend', 'django.contrib.auth.backends.ModelBackend',)

因此,管理员可以使用用户名/密码登录,并且在您的自定义登录页面上,用户将能够通过电子邮件/密码登录。