2012-01-13 100 views
12

我设置了一个包含管理页面的django项目。它在开发的前几个星期完美运行,一段时间没有使用管理页面,当我回到它时,管理页面被打破。无论我做什么,它不会让我登录django上的管理页面被破坏

输入用户名和PW后,管理页面总是说:

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

我检查了DB:超级用户存在,并且has_active,is_superuser和is_staff全部为True。我使用shell来确保密码是正确的。我已经刷新,删除,并重新创建数据库多次,以确保没有错误。我还重新检查了中间件,网址,INSTALLED_APPS等,确保它们都正确设置。

据我所知,在管理页面完美地工作,只是他们从来没有让任何人登录。

任何想法是怎么回事,或其他方法试图调试?我很困惑这个bug。 PS:如果有问题,我使用South进行数据库迁移,使用django-social-auth进行FB登录,单独使用local_settings.py进行生产和开发(我已经检查过它们 - 冲突不是't there。)

+0

如果使用auth.views.login()视图创建自己的登录页面,会发生什么情况? – JeffS 2012-01-13 01:08:27

+0

看起来像几乎相同的问题:“您的用户名和密码不匹配,请重试。” – Abe 2012-01-13 01:21:07

+0

为了获得为FB登录工作的django-social-auth,你是否修改了任何可能改变系统运行authenticate()和login()方式的代码?另外,在开发的几个星期里,你是否已经删除并重新创建了项目,这样settings.py的SECRET_KEY ='...'已经改变了?我认为这个密钥是用来解密密码的,但我并不积极。 – Furbeenator 2012-01-13 01:23:05

回答

14

此问题可能与身份验证后端有关。 请检查您的设置文件的AUTHENTICATION_BACKENDS参数。

请尝试以下值:上 Official Django Documentation

+0

宾果。这就是问题所在 - 当我添加了django-social-auth时,它包含了一整套认证后端,包括django.contrib.auth.backends.ModelBackend。我评论了所有我不打算使用的行,但没有注意到我也在评论这一行。 – Abe 2012-01-13 04:45:02

1

试试这个;在tests.py:

from django.contrib import auth 

class AuthTestCase(TestCase): 
    def setUp(self): 
     self.u = User.objects.create_user('[email protected]', '[email protected]', '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='[email protected]', password='pass') 

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

+1

测试有效 - 返回OK。但网站上的登录仍然无效。我使用check_password检查了shell中的密码,并且它返回True。这里有一些更奇怪的东西:如果我输入的是我的电子邮件地址而不是超级用户名,我会得到“您的电子邮件地址不是您的用户名,请尝试'agong'。”所以它显然能够访问数据库中的记录 - 它只是不会让我登录。 – Abe 2012-01-13 01:55:31

0

你可以做以下

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

的更多信息:

  • 输入您的MySQL(或其他数据库控制台)
  • 使用YourDATABASE;
  • SELECT * from auth_user;
  • watch is_staff and is_superuser item
  • UPDATE auth_user SET is_staff =“1”其中username =“root”;

然后你可以再次登录!

0

我有同样的问题,但设置文件上的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('[email protected]', '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='[email protected]', password='pass') 

还值得一提的是,我是创建一个名为用户配置

自定义用户