Вопрос

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

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

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

Решение

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

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

На обычных страницах форма входа в систему должна иметь что -то подобное <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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top