【问题标题】:Incorrect username and password for Custom User model自定义用户模型的用户名和密码不正确
【发布时间】:2021-06-23 20:02:14
【问题描述】:

我已经创建了一个自定义用户模型

models.py:

from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager

# Create your models here.

class MyAccountManager(BaseUserManager):

    def create_user(self, username, email, password=None):
        if not email:
            raise ValueError("Wrong!")
        if not username:
            raise ValueError("Wrong!")
        user = self.model(
            username =username,
            email = self.normalize_email(email),
            )
        user.set_password(password)
        user.save(using = self._db)
        return user

    def create_superuser(self, username, email, password):
        user = self.create_user(
            username = username,
            email = self.normalize_email(email),
            password = password
            )
        user.is_superuser = True
        user.is_admin = True
        user.is_staff = True
        print(user, self.normalize_email(email), password)

        user.save(using = self._db)
        return user

class Account(AbstractBaseUser):
    username = models.CharField(max_length=15, unique=True)
    email = models.EmailField(max_length=60, verbose_name='email address', unique=True)
    address = models.CharField(max_length=200, null=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)

    objects = MyAccountManager()

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = ['email']

    def __str__(self):
        return self.username

    def has_perm(self, perm, obj=None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

甚至在 admin.py 文件中进行了正确的设置:

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import Account

# Register your models here.

class AccountAdmin(UserAdmin):
    list_display = ['username', 'email', 'address']
    search_fields = ['username', 'email']
    readonly_fields = ['address']

    filter_horizontal = ()
    list_filter = ()
    fieldsets = ()

admin.site.register(Account, AccountAdmin)

但是管理面板告诉我用户名和密码不是超级用户。或者用户名/密码不正确

>>> from user_auth.models import Account
>>> u = Account.objects.all()
>>> u
<QuerySet [<Account: ephiram>]>
>>> u = Account.objects.get(username='ephiram')
>>> u.username
'ephiram'
>>> u.email
'djksdjkj@gmail.com'

用户“ephiram”是会员,但仍被拒绝, 为什么管理仪表板告诉我用户名/密码错误?我已经坚持了几个小时了。

【问题讨论】:

  • 你不能显示/显示密码 Django 内置用户模型会自动加密它们。所以实际上你的代码运行良好
  • 哦。我不知道,谢谢@tahamatoof。尽管提供了正确的密码,但我仍然无法登录。

标签: python django django-models django-admin


【解决方案1】:

您不需要在 models.Account 中编写 is_superuser、is_active 之类的东西。它们已经存在于 AbstractUser 模型中。只需修改您现有的代码。下面的代码工作正常。

from django.db import models
from django.contrib.auth.models import AbstractUser

class Account(AbstractUser):
address = models.CharField(max_length=200, null=True)

USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']

def __str__(self):
    return self.username

from django import forms
from django.contrib.auth.forms import UserCreationForm

class User_Creation_Form(UserCreationForm):  
class Meta:
    model = Account 
    fields = "__all__"

from .forms import User_Creation_Form
from .models import Account
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin

class User_Admin(UserAdmin):
    model = Account
    add_form = User_Creation_Form
    
admin.site.register(Account, User_Admin)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 2016-12-02
    相关资源
    最近更新 更多