简体   繁体   English

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

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

I am trying to create a custom user model in my django app.我正在尝试在我的 django 应用程序中创建自定义用户 model。 But Whenever I tried to do so, I can't login with "staff user" created by the "super user" from the admin panel.但是每当我尝试这样做时,我都无法使用管理面板中“超级用户”创建的“员工用户”登录。 It says:它说:

"Please enter the correct username and password for a staff account. Note that both fields may be case-sensitve." “请输入员工帐户的正确用户名和密码。请注意,这两个字段可能区分大小写。”

app name: Backend应用名称:后端

Backend/models.py后端/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
    
        

Backend/admin.py后端/admin.py

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

I added these lines to settings.py我将这些行添加到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',
)

Thanks in advance.提前致谢。

I had a similar problem and found that passwords were not being hashed when creating new users thought admin interface.我有一个类似的问题,发现在创建新用户时密码没有被散列为管理界面。 When using custom user models you need to register the right ModelAdmin for it which is django.contrib.auth.admin.UserAdmin :使用自定义用户模型时,您需要为其注册正确的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 objects implement logic of Django's admin site and the auth logic is implemented by UserAdmin of auth app. ModelAdmin 对象实现 Django 管理站点的逻辑,而 auth 逻辑由auth app 的UserAdmin实现。 admin.site.register(User) will create a default ModelAdmin for User that implements just plain CRUD operations on it and that was the reason passwords were not being hashed in my case which made it always return wrong password error when trying to login later (since it's assumed stored passwords are hashed). admin.site.register(User)将为User创建一个默认的ModelAdmin ,它只在其上实现普通的 CRUD 操作,这就是密码在我的情况下没有被散列的原因,这使得它在稍后尝试登录时总是返回错误的密码错误(因为假定存储的密码是散列的)。 Also managers are not used to create new objects in admin site.此外,管理器不用于在管理站点中创建新对象。

is_staff needs to set to True for the user to be able to log in is_staff需要设置为True用户才能登录

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

相关问题 管理员注册人员无法登录Django admin,表单注册人员无法登录 - admin registered staff user can't login django admin, form registered staff user can't 如何在管理面板中第一次登录django员工用户? - How to check django staff user first time login in admin panel? 使用 Django 自定义用户 model 成功创建超级用户后,无法登录 Django 管理面板 - Can't login to Django admin panel after successfully creating superuser using Django custom user model 如何根据Django中的管理员或工作人员重定向登录URL - How to redirect login urls depending upon user is admin or staff in django Django:编外人员可以登录到管理页面 - Django: Non-staff users can login to admin page Django 如何限制员工用户从 django 管理面板编辑或删除其他员工用户帖子 - Django how to restrict staff-user to edit or delete others staff-user post from django admin panel Django Admin向工作人员用户添加权限无效 - Django Admin adding permission to staff user doesn't work Django 自定义超级用户无法在管理面板中创建新用户 - Django custom superuser can't create new user in admin panel Django 自定义用户 model,无法登录到 django 管理面板 - Django custom user model, cant login to django admin panel 无法使用自定义用户和Mezzanine / South登录到Django Admin - Can't login to Django Admin with custom user and Mezzanine/South
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM