繁体   English   中英

员工用户无法登录 django 管理面板

[英]Staff user can't login to django admin panel

我正在尝试在我的 django 应用程序中创建自定义用户 model。 但是每当我尝试这样做时,我都无法使用管理面板中“超级用户”创建的“员工用户”登录。 它说:

“请输入员工帐户的正确用户名和密码。请注意,这两个字段可能区分大小写。”

应用名称:后端

后端/models.py

from django.db import models
from django.contrib.auth.models import (
    AbstractBaseUser,
    BaseUserManager
)
# Create your models here.
class UserManager(BaseUserManager):
    
    def create_user(
        self,
        username = None,
        email = None,
        password = None,
        is_active = True,
        is_staff = False,
        is_admin = False
    ):
        if not username:
            raise ValueError("Users must have a username")
        if not password:
            raise ValueError("Users must have a password")
        if not email:
            raise ValueError("Users must have a email")
        
        user_obj = self.model(
            username = username
        )
        user_obj.email = self.normalize_email(email)
        user_obj.set_password(password)
        user_obj.is_active = is_active
        user_obj.is_staff = is_staff
        user_obj.is_admin = is_admin
        user_obj.save(using=self._db)
        return user_obj
        
    def create_staffuser(self, username, email, password):
        user_obj = self.create_user(
            username = username,
            email = email,
            password = password,
            is_staff = True
        )
        return user_obj
    
    def create_superuser(self, username, email, password):
        user_obj = self.create_user(
            username = username,
            email = email,
            password = password,
            is_staff = True,
            is_admin = True
        )
        return user_obj
        
class User(AbstractBaseUser):
    
    username = models.CharField(max_length=255, unique=True)
    email = models.EmailField(max_length=255, unique=True)
    is_active = models.BooleanField(default=False)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)
    
    objects = UserManager()
    USERNAME_FIELD = "username"
    REQUIRED_FIELDS = ["email"]
    
    def __str__(self):
        return self.username
        
    def get_full_name(self):
        return self.username
    
    def get_short_name(self):
        return self.username 
    
    def has_module_perms(self, app_label):
        return True 
    
    def has_perm(self, perm, ob=None):
        return True
    
        

后端/admin.py

from django.contrib import admin
from Backend.models import(
    User
)
# Register your models here.
admin.site.register(User)

我将这些行添加到settings.py


INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # my application
    'Backend'
]

# added lines
AUTH_USER_MODEL = "Backend.User"
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
)

提前致谢。

我有一个类似的问题,发现在创建新用户时密码没有被散列为管理界面。 使用自定义用户模型时,您需要为其注册正确的ModelAdmin ,即django.contrib.auth.admin.UserAdmin

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from Backend.models import(
    User
)

admin.site.register(User, UserAdmin)

ModelAdmin 对象实现 Django 管理站点的逻辑,而 auth 逻辑由auth app 的UserAdmin实现。 admin.site.register(User)将为User创建一个默认的ModelAdmin ,它只在其上实现普通的 CRUD 操作,这就是密码在我的情况下没有被散列的原因,这使得它在稍后尝试登录时总是返回错误的密码错误(因为假定存储的密码是散列的)。 此外,管理器不用于在管理站点中创建新对象。

is_staff需要设置为True用户才能登录

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM