[英]admin registered staff user can't login django admin, form registered staff user can't
[英]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.