2012-01-13 2 views
12

Я создал проект django с административной страницей. Он отлично работал в течение первых двух недель разработки, не использовал страницу администратора некоторое время, и когда я вернулся к ней, страница администратора была сломана. . Независимо от того, что я делаю, это не позволит мне войти вСтраница администратора на django нарушена

После поступления имени пользователя и PW, страница администратора всегда говорит:

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

Я проверил БД: суперпользователь существует и has_active, is_superuser и is_staff все True. Я использовал оболочку, чтобы убедиться, что пароль правильный. Я покраснел, удалил и повторно создал базу данных несколько раз, чтобы убедиться, что нет ошибки. Я также дважды проверял промежуточное ПО, URL-адреса, INSTALLED_APPS и т. Д., Чтобы убедиться, что все они настроены правильно.

Насколько я могу судить, админ страницы работают отлично, за исключением, что они никогда не позволяйте никому войти.

Любые идеи, что происходит здесь, или другие методы для пытаются отладить? Я действительно озадачен этой ошибкой.

PS: В случае, если это имеет значение, я использую юг для миграции DB, django-social-auth для входа в систему FB и отдельный файл local_settings.py для производства и разработки (я проверил их оба - конфликт isn t t.)

+0

Что произойдет, если вы создадите свою собственную страницу входа в систему, используя представление auth.views.login()? – JeffS

+0

Похож на ту же проблему: «Ваше имя пользователя и пароль не совпадали. Повторите попытку». – Abe

+0

Чтобы получить django-social-auth, работающий для входа в FB, вы изменили какой-либо код, который может изменить способ запуска системы authenticate() и login()? Кроме того, в течение нескольких недель разработки вы удалили и воссоздали проект, так что изменился параметр SECRET_KEY =. ...? Я думаю, что этот ключ используется для дешифрования пароля, но я не уверен. – Furbeenator

ответ

14

Эта проблема может быть связана с аутентификационными бэкэндами. Проверьте параметры файлов параметров AUTHENTICATION_BACKENDS.

Попробуйте следующее значение:

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

Более подробную информацию о Official Django Documentation

+0

Бинго. В этом была проблема - когда я добавил django-social-auth, он включил целый список аутентификации, включая django.contrib.auth.backends.ModelBackend. Я прокомментировал все строки, которые я не планировал использовать, не заметив, что я тоже комментирую это. – Abe

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, и вернул True. Вот что-то еще странное: если я напишу свой адрес электронной почты вместо имени суперпользователя, я получу «Ваш адрес электронной почты не является вашим именем пользователя. Вместо этого попробуйте« agong ». Таким образом, он явно может получить доступ к записи в БД - он просто не позволит мне войти. – Abe

0

Вы можете сделать следующее:

  • Введите ваш MySQL (или другую консоль базы данных)
  • ИСПОЛЬЗУЙТЕ свою базу данных;
  • SELECT * from auth_user;
  • watch is_staff и 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') 

Стоит также отметить, что я создания пользовательского пользователя с именем UserProfile