2010-12-01 4 views
2

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

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

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

Какая ошибка у вас? – 2010-12-01 17:37:30

+0

Я получаю сообщение об ошибке, когда нет шаблона `registration/login.html`. – Agos 2010-12-01 23:51:46

ответ

3

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

  1. Вы должны предоставить специальную страницу входа в системе (то есть определить registration/login.html) и для не loged в пользователе каждая нормальная страницы форма входа;
  2. если пользователь логины обычно (эта логика обрабатывается django.contrib.auth.views.login):
    • для нормальной страницы: перенаправляют пользователя на страницу, откуда она loged в;
    • для страницы входа: если есть next param, переадресовать туда, иначе перенаправить на главную страницу;
  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 .: Я не использую Buildin зрения выхода из системы Джанго вместо этого я использую свой собственный: почти то же самое, но это выход из системы только для запросов POST. Это запрещает пользователям выйти из системы с помощью <img src='my_site/logout' /> вредоносного кода.

Смежные вопросы