Django встроенный вид входа в систему и ошибки - PullRequest
2 голосов
/ 01 декабря 2010

Я использую django.contrib.auth.views.login and .logout представления.Очень удобно, работает из коробки, развернет снова AAA + и т. Д.

Проблема возникает, поскольку я не использую отдельную страницу входа в систему, а вместо этого у меня есть окно входа в систему на каждой странице (если пользователь незалогинился, конечно).И поэтому, когда комбинация имени пользователя и пароля неправильная, я получаю сообщение об ошибке.Какой из этих трех путей мне выбрать?

  • Существует секретный способ перенаправления на следующий не только при успехе, но и при ошибке.Если это так, пожалуйста, скажите мне!
  • Я пишу свой собственный вид входа в систему, в то время как использую систему сообщений Django
  • Я пишу страницу входа (ну, просто отсутствует шаблон)Я могу использовать всю мощь системы аутентификации Django.

1 Ответ

3 голосов
/ 01 декабря 2010

Одно из возможных решений (первый + третий вариант в вашем списке):

  1. Вы должны предоставить специальную страницу входа (определите registration/login.html). а для не авторизованного пользователя каждая обычная страница имеет форму входа;
  2. если пользователь входит в систему нормально (эта логика обрабатывается в django.contrib.auth.views.login):
    • для обычной страницы: перенаправить пользователя на страницу, с которой он вошел;
    • для страницы входа в систему: если есть параметр next, перенаправить туда, иначе перенаправить на главную страницу;
  3. если пользователь не может войти в систему: перенаправить (или перерисовать) страницу входа с предоставленными ошибками;
  4. если пользователь вошел в систему: обычная страница предоставляет ссылку для выхода из системы (специальная страница все еще существует в случае, если пользователь хочет повторно войти или войти через другую учетную запись).

На обычных страницах форма входа должна выглядеть примерно так: <input type="hidden" name="next" value="{{ request.path }}" />.

В настройках проекта:

# in settings.py
LOGIN_URL = '/login'     # this should coinside with url pattern of login view
LOGOUT_URL = '/logout'   # same but for logout view
LOGIN_REDIRECT_URL = '/' # url to main page

N.B .: Я не использую встроенное представление django для выхода из системы, вместо этого я использую свое собственное: почти то же самое, но выходит из системы только для запросов POST. Это запрещает пользователям выходить из системы с помощью <img src='my_site/logout' /> вредоносного кода.

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