[英]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.