Django管理不使用自定义用户模型正确登录(Django admin does not login

2019-08-17 06:55发布

我升级的应用程序,我对1.4.5的Django Django的到1.5和刚刚完成迁移到一个自定义的用户模型。 当我登录到我的应用程序,用我自己的认证形式,用我的超级用户凭证(创建时做manage.py syncdb )一切工作正常。

我能得到验证,如果我去/admin ,我已经登录,符合市场预期。 我能够浏览和完美的使用管理控制台。 但是,如果我尝试登录到从管理面板/admin ,使用Django管理登录表单,我得到的错误:

请输入一个员工帐户的正确电子邮件和密码。 两个地方都要注意大小写。

我做了一些调查,并认为它可能有一些做ModelAdmin ,所以我跟着这个例子从文档和创建一个自定义ModelAdmin 。 然而,问题依然存在。

任何想法可能是造成这个?

Answer 1:

你加在下面几行到您create_superuser函数,它是下BaseUserManager ? 这可能是这样的:

class CustomUserManager(BaseUserManager):
    def create_user(self, username, email, password=None):
        if not username:
            raise ValueError('Dude you need a username.')
        if not email:
            raise ValueError(
                'type an e-mail..')

        new_user = self.model(
            username=username,
            email=CustomUserManager.normalize_email(email))
        new_user.set_password(password)
        new_user.save(using=self._db)
        return new_user

  def create_superuser(self, username, email, password):
        new = self.create_user(
            username,
            email,
            password=password
        )
        new.is_active = True
        new.is_staff = True
        new.is_superuser = True
        new.save(using=self._db)
        return new

专注于:

    new.is_active = True
    new.is_staff = True
    new.is_superuser = True


Answer 2:

我有同样的问题,但我发现@阿利克斯的回答如此有益。 我忘了添加is_active=True on create_superuser()

def create_staffuser(self, email, first_name=None, last_name=None, user_role=None, password=None):
    user = self.create_user(
        email,
        first_name=first_name,
        last_name=last_name,
        user_role=user_role,
        password=password,
        is_staff=True,
        is_active=True
    )
    return user

所以基本上你需要把重点放在IS_ACTIVE和检查

# changes the in-build User model to ours (Custom)
AUTH_USER_MODEL = 'accounts.User'

AUTHENTICATION_BACKENDS = (
    # Needed to login by custom User model, regardless of `allauth`
    "django.contrib.auth.backends.ModelBackend",

    # `allauth` specific authentication methods, such as login by e-mail
    "allauth.account.auth_backends.AuthenticationBackend",
)


文章来源: Django admin does not login properly with custom User model