Промежуточное ПО аутентификации Django постоянно отказывает в регистрации - PullRequest
2 голосов
/ 30 октября 2010

Предисловие: Я учил себя, как использовать Django пару лет назад, разработал веб-приложение, вручил ключи своим клиентам, и с тех пор мне не приходилось много делать с приложением, и с тех пор я не разрабатывал с Djangoзатем.

Проблема

Многие пользователи не могут успешно войти в систему, и это кажется постоянной проблемой для тех, на кого она влияет.Однако я не могу понять, что общего у этих пользователей.Они используют разные операционные системы, разные браузеры, заходят на сайт в разное время дня / недели / месяца.Это надежный сбой, который, похоже, совсем не соответствует шаблону.

Особенности

Веб-приложение работает на Windows, Django 1.0 и использует MySQL в качествебаза данных.Сеансы хранятся в базе данных.

Устранение возможных причин

К сожалению, это не проблема "неправильного имени пользователя / пароля".Это было бы легко.Нет, тысячи пользователей этого веб-приложения используют одно и то же имя пользователя и пароль.(Не мое предпочтение или выбор!) Кроме того, ошибка аутентификации не сопровождается сообщением об ошибке имени пользователя / пароля.

Теперь сайт работает для большинства пользователей.,Итак, я знаю, что базовая конфигурация аутентификации верна: кортежи MIDDLEWARE_CLASSES и INSTALLED_APPS содержат правильные строки вклада.LOGIN_URL, LOGIN_REDIRECT_URL и LOGOUT_URL установлены правильно.Диспетчер URL работает, представления работают и т. Д.

Тот факт, что это постоянный сбой для затронутых пользователей, означает, что это не проблема загрузки.

Для некоторых затронутых пользователей,Использование другого браузера решит проблему.Для других это не так.И это не обязательно вопрос особой конфигурации браузера, потому что многие пользователи, которые пробовали второй браузер, делали это, загружая / устанавливая второй браузер впервые, предположительно используя конфигурацию по умолчанию.(Обратите внимание, что пользователи в основном не являются «опытными пользователями».)

Воспроизведение ошибки

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

Однако проблема воспроизводима.Компьютер основного клиента, когда он вошел в систему и использует IE 7 или 8, не может войти в систему с ожидаемым поведением.Загвоздка: не воспроизводится, когда I подключен к одному и тому же компьютеру, независимо от используемого браузера.

Почему я спрашиваюЗдесь

Я делаю большую часть своей разработки на PHP / MySQL.Когда я ищу проблемы со входом в систему, я ищу проблемы с именем пользователя / паролем, файлами cookie, сеансами на стороне сервера, браузерами и т. Д. Я пишу код отладки для вывода на экран переменных сервера / cookie и т. Д.

К сожалению, я не знаю, как отлаживать промежуточное ПО Django.Я даже не знаю, что это за проблема.

Наконец

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

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

EDITED

Вот некоторые соответствующие коды по запросу.

insettings.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
)

LOGIN_URL = '/login/'
LOGOUT_URL = '/logout/'
LOGIN_REDIRECT_URL = '/'

в urls.py

(r'^login/', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),  
(r'^logout/', 'django.contrib.auth.views.logout', {'template_name': 'logout.html'}),

в login.html

{% block content %}
<h1>Please Log In</h1>
{% if form.errors %}<p>Your username and password didn't match. Please try again.</p>{% endif %}
<form method="post" action="/login/">
<p>{{ form.username.label_tag }} {{ form.username }}</p>
<p>{{ form.password.label_tag }} {{ form.password }}</p>
<p><input type="submit" value="login" /></p>
<input type="hidden" name="next" value="{{ next }}" />
</form>
{% endblock %}

Ответы [ 2 ]

0 голосов
/ 30 октября 2010

Отказ от ответственности: Я ни в коем случае не эксперт Django / Python. Просто дайте общий совет.

SQL-сервер подключен? Возможно, он перегружен, отбрасывая некоторые запросы на вход в систему через какое-то время.

Все ли работает на одном сервере или на нескольких серверах? Если их несколько, между ними могут быть тайм-ауты или проблемы с синхронизацией.

0 голосов
/ 30 октября 2010

очень маловероятно, что ошибка находится в стандартном промежуточном программном обеспечении django, поэтому вам не нужно отлаживать это, но вы можете добавить несколько операторов логирования в свой код и затем проанализировать журналы.Модуль Python logging хорошо работает для этой цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...