为了账号安全,请及时绑定邮箱和手机立即绑定

无法登录在django管理员后端创建的超级用户

无法登录在django管理员后端创建的超级用户

慕田峪7331174 2021-04-10 16:15:52
我正在尝试在django管理员后端创建超级用户,但由于某种原因我无法让他们登录。这是我的用户类,class User(AbstractBaseUser, PermissionsMixin):    email = models.EmailField(unique=True, max_length=255)    mobile = PhoneNumberField(null=True)    username = models.CharField(null=False, unique=True, max_length=255)    full_name = models.CharField(max_length=255, blank=True, null=True)    is_staff = models.BooleanField(default=False)    is_superuser = models.BooleanField(default=False)    is_active = models.BooleanField(default=False)    USERNAME_FIELD = 'email'    REQUIRED_FIELDS = ['username']    objects = UserManager()这是相关的后端设置。OAUTH2_PROVIDER = {    # this is the list of available scopes    'ACCESS_TOKEN_EXPIRE_SECONDS': 60 * 60 * 24,    'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'},    'OAUTH2_BACKEND_CLASS': 'oauth2_provider.oauth2_backends.JSONOAuthLibCore',}AUTHENTICATION_BACKENDS = (        'django.contrib.auth.backends.ModelBackend',)# REST FrameworkREST_FRAMEWORK = {    'DEFAULT_AUTHENTICATION_CLASSES': (        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',    ),    'DEFAULT_PERMISSION_CLASSES': (        'rest_framework.permissions.IsAuthenticated',    ),}我正在检查创建表单上的is_staff和is_superuser是否正确,仍然一无所获。创建的超级用户无法登录到管理后端。我在这里做错什么了。
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

首先,您正在使用自定义用户模型。在您的设置文件中,您是否告诉django使用您的模型而不是默认的auth.models.User?


第二,


您正在create_superuser函数中调用self.create_user。


您是否也覆盖create_user函数?


如果是,请提供实施方案。


更新


您不需要像以前那样更改实现用户管理器的功能。如果您在django.auth.models中查看UserManger的实现。您可以从那里获得灵感,并且避免犯错-例如:创建标准用户时不保存模型,因为您不调用保存方法。


我建议像这样更改您的UserManager:


class UserManager(BaseUserManager):


    use_in_migrations = True


    def _create_user(self, email, password, 

**extra_fields):


        if not email:

            raise ValueError('The given email must be set')

        email = self.normalize_email(email)

        user = self.model(email=email, **extra_fields)

        user.set_password(password)

        user.save(using=self._db)

        return user


    def create_user(self, email, password=None, **extra_fields):


        extra_fields.setdefault('is_staff', False)

        extra_fields.setdefault('is_superuser', False)

        extra_fields.setdefault('is_active', False)


        return self._create_user(email, password, **extra_fields)


    def create_superuser(self, email, password, **extra_fields):


        extra_fields.setdefault('is_staff', True)

        extra_fields.setdefault('is_superuser', True)


        if extra_fields.get('is_staff') is not True:

            raise ValueError('Superuser must have is_staff=True.')

        if extra_fields.get('is_superuser') is not True:

            raise ValueError('Superuser must have is_superuser=True.')      


        return self._create_user(email, password, **extra_fields)


查看完整回答
反对 回复 2021-04-20
  • 2 回答
  • 0 关注
  • 572 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号