员工用户无法登录到 django 管理面板
Staff user can't login to django admin panel
我正在尝试在我的 Django 应用程序中创建自定义用户模型。但是每当我尝试这样做时,我都无法使用管理面板中“超级用户”创建的“员工用户”登录。它说:
“请输入正确的员工帐户用户名和密码。请注意,这两个字段可能区分大小写。”
应用程序名称:后端
Backend/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
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',
)
提前致谢。
is_staff
需要设置为 True
用户才能登录
我遇到了类似的问题,发现在管理界面创建新用户时密码没有被散列。使用自定义用户模型时,您需要为其注册正确的 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
应用程序的 UserAdmin
实现。 admin.site.register(User)
将为 User
创建一个默认值 ModelAdmin
,它只在其上实现简单的 CRUD 操作,这就是密码在我的情况下没有被散列的原因,这使得它总是 return稍后尝试登录时出现密码错误错误(因为假定存储的密码经过哈希处理)。此外,管理器不用于在管理站点中创建新对象。
我正在尝试在我的 Django 应用程序中创建自定义用户模型。但是每当我尝试这样做时,我都无法使用管理面板中“超级用户”创建的“员工用户”登录。它说:
“请输入正确的员工帐户用户名和密码。请注意,这两个字段可能区分大小写。”
应用程序名称:后端
Backend/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
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',
)
提前致谢。
is_staff
需要设置为 True
用户才能登录
我遇到了类似的问题,发现在管理界面创建新用户时密码没有被散列。使用自定义用户模型时,您需要为其注册正确的 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
应用程序的 UserAdmin
实现。 admin.site.register(User)
将为 User
创建一个默认值 ModelAdmin
,它只在其上实现简单的 CRUD 操作,这就是密码在我的情况下没有被散列的原因,这使得它总是 return稍后尝试登录时出现密码错误错误(因为假定存储的密码经过哈希处理)。此外,管理器不用于在管理站点中创建新对象。