django上的管理页面已损坏

bweufnob  于 2022-12-20  发布在  Go
关注(0)|答案(7)|浏览(173)

我已经建立了一个带有管理页面的django项目,在开发的前几周它运行得很好,有一段时间没有使用管理页面,当我回到它的时候,管理页面已经坏了,无论我做什么,它都不允许我登录。
输入用户名和密码后,管理页面总是显示:

Please enter a correct username and password. Note that both fields are case-sensitive.

我查了数据库:超级用户存在,并且is_active、is_superuser和is_staff都为True。我已经使用shell来确保密码正确。我已经多次刷新、删除和重新创建数据库以确保没有错误。我还仔细检查了中间件、url、INSTALLED_APPS等以确保它们都设置正确。
据我所知,管理页面工作完美,除了他们从来没有让任何人登录。
有什么想法是怎么回事,或其他方法来尝试调试?我真的被这个错误困惑。
PS:如果有必要,我将使用South进行DB迁移,使用django-social-auth进行FB登录,并使用单独的local_settings.py进行生产和开发(我已经检查了它们--不存在冲突)。

ki0zmccv

ki0zmccv1#

此问题可能与身份验证后端有关。请检查AUTHENTICATION_BACKENDS参数的设置文件。
尝试以下值:

AUTHENTICATION_BACKENDS = (
    ('django.contrib.auth.backends.ModelBackend'),
)

更多关于Django官方文档的信息

qlfbtfca

qlfbtfca2#

试试这个;在tests.py:

from django.contrib import auth

class AuthTestCase(TestCase):
    def setUp(self):
        self.u = User.objects.create_user('test@dom.com', 'test@dom.com', 'pass')
        self.u.is_staff = True
        self.u.is_superuser = True
        self.u.is_active = True
        self.u.save()

    def testLogin(self):
        self.client.login(username='test@dom.com', password='pass')

然后用python manage.py test <your_app_name>.AuthTestCase运行测试,如果通过了,说明系统在工作,也许可以查看用户名和密码,以确保它们是可接受的。

rfbsl7qr

rfbsl7qr3#

我遇到了同样的问题,但是设置文件上的AUTHENTICATION_BACKENDS标志对我来说不是问题。使用Django Rest Framework,我修改了密码,没有调用set_password,因此绕过了哈希密码。这就是为什么显示无效登录的原因。
我能够通过运行简单测试来检测这个问题,以便通过类似的测试来测试用户创建:

from django.test import TestCase

from django.contrib import auth
from .models import *

class AuthTestCase(TestCase):
    def setUp(self):
        self.u = UserProfile.objects.create_user('test@dom.com', 'iamtest', 'pass')
        self.u.is_staff = True
        self.u.is_superuser = True
        self.u.is_active = True
        self.u.save()

    def testLogin(self):
        self.client.login(username='test@dom.com', password='pass')

还值得一提的是,我创建了一个名为UserProfile的自定义用户

qzwqbdag

qzwqbdag4#

您是否使用了自定义用户模型,但忘记将其添加到settings.py中?这就是我刚刚遇到的情况。

# Substituting a custom User model

AUTH_USER_MODEL = "app_custom_auth.User"
i34xakig

i34xakig5#

您可以执行以下操作:

  • 输入mysql(或其他数据库控制台)
  • 使用您的数据库;
  • 从授权用户中选择 *;
  • 监视is_staff和is_超级用户项
  • 更新授权用户设置为员工="1",其中用户名="root";

然后您可以再次登录!

jhdbpxl9

jhdbpxl96#

答案是:

def create_superuser(self, username, email, password=None, **extra_fields):
    user = self.create_user(username, email, password=password, is_staff=True, **extra_fields)
    user.is_active = True
    user.save(using=self._db)
    return
tv6aics1

tv6aics17#

您只需要删除db.sqlite3并再次迁移(python manage.py migrate),然后python manage.py createsuperuser -〉现在再次创建帐户

相关问题