В чем разница между аутентификацией и логином?

Документация: https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.login

Когда вы вручную регистрируете пользователя, вы должны вызвать функцию authentication() перед вызовом функции login(). authentication() устанавливает атрибут для пользователя, отмечая, какой сервер аутентификации успешно аутентифицировал этого пользователя (подробности см. в документации по серверу), и эта информация потребуется позже в процессе входа в систему. Если вы попытаетесь напрямую войти в пользовательский объект, полученный из базы данных, возникнет ошибка.

Итак, почему именно authenticate и login 2 отдельные функции? Насколько я понимаю, authenticate просто проверяет данные для входа. login возьмет объект пользователя и установит куки. Единственная причина, по которой я могу думать, что они разделены, заключается в том, что, возможно, вы можете поместить разные объекты пользователя, скажем, у пользователя было объединено 2 учетных записи. Возможно, вы хотите сначала подтвердить адрес электронной почты. Поэтому это отдельные функции, а login не обертывает authenticate?


person User    schedule 31.01.2015    source источник


Ответы (2)


Это вопрос принципа единой ответственности: метод должен делать одну логическую вещь. Как вы сами заметили, эти два шага логически различны:

authenticate просто проверяет данные для входа. login возьмет объект пользователя и установит куки

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

Иногда вам может потребоваться аутентифицировать пользователей (подтвердить, что они являются теми, за кого себя выдают) без их входа в систему. Если бы эти две функции были объединены в одну, вы не смогли бы этого сделать, даже если бы вы просто хотели сделать одну -time check, вам нужно было бы войти в них, создав сеанс, что не имело бы смысла. Поскольку это совершенно разные цели, имеет смысл использовать два метода.

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

Разложение методов на их мельчайшие логически независимые элементы — разумное решение, дающее много преимуществ.

person janos    schedule 31.01.2015

Проще говоря,

Аутентификация относится к проверке учетных данных пользователя, тогда как вход в систему относится к созданию пользовательского сеанса после проверки (аутентификации) учетных данных пользователя.

person Alfie    schedule 31.01.2015