Вопрос по login, mod-wsgi, python, admin, django – Невозможно войти на страницу администратора django с действительным именем пользователя и паролем

38

Я не могу войти на страницу администратора django. Когда я ввожу правильное имя пользователя и пароль, он просто снова открывает страницу входа без сообщений об ошибках

Этот вопрос вdjango FAQ, но я просмотрел ответы там и до сих пор не могу пройти начальный экран входа в систему.

Я использую django 1.4 на Ubuntu 12.04 с apache2 и modwsgi.

Я подтвердил, что регистрирую администратора вadmin.py файл, обязательно синхронизировать после добавленияINSTALLED_APPS. When I enter the wrong password I DO получаю ошибку, поэтому мой админский пользователь проходит аутентификацию, но не переходит на страницу администратора.

Я пробовал обе настройкиSESSION_COOKIE_DOMAIN на IP-адрес машины и нет. (Подтверждено, что домен cookie отображается как IP-адрес компьютера в chrome)

Также проверил, что пользователь аутентифицируется через оболочку:

>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff
True
>>> u.is_superuser
True
>>> u.is_active 
True

Попытка входа в систему с использованием IE8 и Chrome Canary приводит к одному и тому же возврату к экрану входа в систему.

Есть ли что-то еще, что мне не хватает ????

settings.py

...
MIDDLEWARE_CLASSES = (
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.transaction.TransactionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',)
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.admin',    
    'django.contrib.staticfiles',
    'django.contrib.gis',
    'myapp.main',
)

SESSION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_SAVE_EVERY_REQUEST = True
SESSION_COOKIE_AGE = 86400 # sec
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_NAME = 'DSESSIONID'
SESSION_COOKIE_SECURE = False

urls.py

from django.conf.urls.defaults import * #@UnusedWildImport
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',
    (r'^bin/', include('myproject.main.urls')),    
    (r'^layer/r(?P<layer_id>\d+)/

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.get_result_layer"), (r'^layer/b(?P<layer_id>\d+)/

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.get_baseline_layer"), (r'^layer/c(?P<layer_id>\d+)/

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.get_candidate_layer"), (r'^layers/

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.get_layer_definitions"), (r'^js/mapui.js

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.view_mapjs"), (r'^tilestache/config/

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.get_tilestache_cfg"), (r'^admin/', include(admin.site.urls)), (r'^sites/', include("myproject.sites.urls")), (r'^

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

, "myproject.layer.views.view_map"), ) urlpatterns += staticfiles_urlpatterns()

Версия Apache:

Apache/2.2.22 (Ubuntu) mod_wsgi/3.3 Python/2.7.3 configured

Apache apache2 / sites-available / default:

<VirtualHost *:80>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess lbs processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup lbs
        WSGIScriptAlias / /var/www/bin/apache/django.wsgi
        Alias /static /var/www/lbs/static/
</VirtualHost>
<VirtualHost *:8080>
        ServerAdmin [email protected]
        DocumentRoot /var/www/bin
        LogLevel warn
        WSGIDaemonProcess tilestache processes=2 maximum-requests=500 threads=1
        WSGIProcessGroup tilestache
        WSGIScriptAlias / /var/www/bin/tileserver/tilestache.wsgi
</VirtualHost>

UPDATE

Страница администратора продолжается при использовании сервера разработки черезrunserver так что похоже на проблему wsgi / apache. Все еще не поняли это.

SOLUTION

Проблема была в том, что у меня был файл настроекSESSION_ENGINE значение установлено в'django.contrib.sessions.backends.cache' without имеяCACHE_BACKEND правильно настроен.

Я изменил SESSION_ENGINE на'django.contrib.sessions.backends.db' который решил проблему.

@monkut не могли бы вы попробовать это без WSGI в уравнении (см. выше)? supervacuo
Вы на самом деле не можете подтвердить подлинность? Вы можете войти в систему. но все еще глядя на форму входа. John Mee
Работает ли это, когда вы запускаете его из./manage.py runserver (i.e. не законченоmod_wsgi)? supervacuo
Вы используете это на своем локальном компьютере или в качестве действующего домена? Если это домен, попробуйте установить для параметра SESSION_COOKIE_DOMAIN значение, соответствующее IP-адресу вашего компьютера. Если он находится на вашем локальном компьютере, попробуйте установить для него адрес обратной связи 127.0.0.1. Thomas
Вы пробовали двигатьсяdjango.middleware.csrf.CsrfViewMiddleware доdjango.contrib.auth.middleware.AuthenticationMiddleware ? Brandon

Ваш Ответ

16   ответов
0

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

Celery не может передать свои асинхронные задачи в RabbitMQ, поскольку сервер RabbitMQ не может запуститься.

1

У меня была эта проблема. Проблема в том, что в производстве я установил две переменныеTrue это позволило мне подключиться к сайту с помощью https.

SESSION_COOKIE_SECURE а такжеCSRF_COOKIE_SECURE должен быть установлен вFalse если вы разрабатываете на localhost http. Изменение этих двух переменных наFalse позволил мне войти в админ сайта при локальной разработке.

0

Убедитесь, что в таблице пользователей вашей базы данных есть следующая запись:

is_staff  => True  (if exit).
is_active  => True .
is_superuser => True.
0

Вы можете убедиться, что созданный пользователь был помечен как Is_staff = True, иногда я забываю пометить это, чтобы разрешить пользователям входить в администратор django

9
>>> from django.contrib.auth import authenticate
>>> u = authenticate(username="user", password="pass")
>>> u.is_staff True
>>> u.is_superuser True

Is there something else I'm missing????

u.is_active должно бытьTrue

спасибо, да, is_active также верно. monkut
Для меняis_staff было странноFalse
@BurhanKhalid Этоu.is_staff = True у вас пропущен знак равенства
2

звучит как проблема сеанса, потому что после публикации вы будете перенаправлены, и система сразу же забудет, что вы вошли в систему.

попробуйте следующее:

check your session backend is working. swap it with cache backend if you use db cache backend to check if transaction middleware is messing around. try db backend and check if there are sessions stored in the db table
48

Шаги для отладки:

Make sure that your Database is synced Double check that you have a django_session table Try to authenticate Do you see a record being created in the django_session table?

ЕСЛИ НЕ

remove non-standard settings AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.ModelBackend',) SESSION_EXPIRE_AT_BROWSER_CLOSE = True SESSION_SAVE_EVERY_REQUEST = True SESSION_COOKIE_AGE = 86400 # sec SESSION_COOKIE_DOMAIN = None SESSION_COOKIE_NAME = 'DSESSIONID' SESSION_COOKIE_SECURE = False Make sure that your Database is synced Double check that you have a django_session table Try to authenticate Do you see a record being created in the django_session table?

Дайте мне знать, если это окажется полезным отладка.

Пример файла настроек:https://github.com/fyaconiello/Django-Blank-Bare-Bones-CMS/blob/master/dbbbcms/settings.py

В моем случае просто SESSION_COOKIE_SECURE = False решил это.
Спасибо. Я проверил таблицу сеансов, и кажется, что записьnot создано. Я дважды проверил, и мои настройки такие же, как вы опубликовали выше, и я не вижу записи в таблице. monkut
Хорошо, это указало мне в правильном направлении. Как и предполагалось, это была неправильная конфигурация с моей стороны. значение SESSION_ENGINE было установлено на «django.contrib.sessions.backends.cache»without правильно настроив CACHE_BACKEND. Я изменил SESSION_ENGINE на «django.contrib.sessions.backends.db». который решил проблему. monkut
Как @daigorocub, мне нужно было только сделатьSESSION_COOKIE_SECURE = False, Очевидно, что если для этого параметра установлено значение True, а соединение не по протоколу HTTPS (типично для настройки dev), вход в систему не может быть отмечен, поскольку нет файла cookie сеанса, поэтому вы должны войти в систему снова. Похоже, что должна быть ошибка, когда для настройки требуются безопасные куки-файлы, а соединение небезопасно - что-то вроде большого красного флажка, что безопасность вашей сети испорчена, - но это действительно решило проблему с входом в систему администратора.
В моем случае я использовал RemoteUserBackend для аутентификации, но я забыл настроить Nginx для установки REMOTE_USER на машине, которая не работала.
3

У нас была похожая проблема в нашем приложении, и они могут помочь:

Use cleanup command to clear older sessions from django_sessions

Check the cookie size in firefox(firebug) or chrome developer tools. Because messaging is enabled by default in admin(django.contrib.messages.middleware.MessageMiddleware), the cookie size sometimes get larger than 4096 bytes with multiple edits and deletes. One quick test is to delete the "message" cookie and see if you can login after that.

И мы фактически закончили тем, что переключились на маршрут nginx / uwsgi из-за этой и других проблем с памятью с apache. С тех пор это не повторялось в nginx.

0

Вы пытались создать пользователя с помощью:

python manage.py createsuperuser

У меня та же проблема, когда я создаю базу данных на тестовой машине и переносу ее на сервер развертывания ...

Спасибо, я пытался создатьanother суперпользователь с этим способом и попытка входа в систему, но у меня все еще есть та же самая проблема. monkut
1

Проверка некоторых других статей на эту тему может быть связана с sys.path. Можете ли вы проверить и сравнить sys.path при запуске сервера dev и при запуске WSGI.

Для некоторых деталей, посмотритеэтот и этостатья, Но я бы сначала проверил sys.path, прежде чем углубляться в детали этой статьи.

0

Отказ от ответственности: я пока не могу добавлять комментарии, поэтому мне нужно попросить разъяснений, предлагающих решение в то же время. Простите за это.

Вышел ли пользователь сразу после входа? что-то вродеЭта проблема

Вы можете проверить это разными способами, я предлагаю добавить ловушку к сигналу выхода из системы (вы можете поместить его в свой models.py):

from django.contrib.auth.signals import user_logged_out

def alertme(sender, user, request, **kwargs):
    print ("USER LOGGED OUT!") #or more sophisticate logging

user_logged_out.connect(alertme)

затем попробуйте войти в систему и проверить, появляется ли сообщение в вашей консоли. Если он появляется, то вам нужно проверить, есть ли у вас перенаправление или настроенный шаблон, вызывающий выход из системы после входа в систему. Надеюсь, это поможет вам найти проблему.

1

Я не совсем уверен, но проблема может быть в вашей конфигурации URL, конкретно в этих двух строках:

(r'^admin/', include(admin.site.urls)),  
(r'^sites/', include("myproject.sites.urls")),

Когда-то у меня были проблемы с просмотром администратора моего проекта Django, потому что одна конфигурация URL перезаписала часть URL-адреса администратора. Кажется, что Django не нравится, когда вы указываете пользовательскую конфигурацию URL, которая содержит элементы, которые также являются частью URL администратора. В вашем случае у вас есть приложениеdjango.contrib.sites включен в вашемsettings.py, Вы можете получить доступ к панели администратора этого приложения, перейдя вhttp://127.0.0.1:8000/admin/sites/, Возможно, ваша конфигурация URL сr'^sites/' в нем переопределяет часть административного URL. Попробуйте переименовать эту конкретную конфигурацию URL или отключитеdjango.contrib.sites вINSTALLED_APPS в целях тестирования.

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

0

У меня была такая же проблема, и она была просто решена после перезапуска сервера:

systemctl restart nginx
1

Убедитесь, что у вас есть хотя бы одинsite работать с.

>>> from django.contrib.sites.models import Site
>>> Site.objects.count()
(0.048) SELECT COUNT(*) FROM `django_site`; args=()
1

Если вы видите 0 здесь - создайте его.

нет, я решил эту проблему до того, как упомянул здесь проблему. monkut
Спасибо, когда не был создан сайт, там отображалась ошибка, поэтому я ее создал. monkut
@monkut Итак, теперь все в порядке?
2

Я не верю, что пароль администратора хранится в файле settings.py. Он создается при первом запуске syncdb. Я думаю, что вы либо пропустили создание суперпользователя, либо просто сделали опечатку. Попробуйте запустить в терминале в ваших проектах root.

python django-admin.py создает пользователя

Это позволит вам повторно ввести логин администратора. Также видно здесьhttps://docs.djangoproject.com/en/dev/ref/django-admin/

OP может аутентифицироваться в оболочке, так что это не так.
Упс. Я не видел эту часть. У меня ничего нет тогда :(
0

Для меня, я не мог войти на страницу администратора в Firefox, но мог войти в Chrome. Проблема была в том, что у меня в файле settings.py был установлен CSRF_COOKIE_PATH. Никогда не используйте это. На django 1.8 он не работает должным образом.

Похожие вопросы