- en
- Language: ru
- Documentation version: 0.1
Авторизация по электронной почте¶
python-social-auth поставляется с бэкендом EmailAuth, который может пригодиться, если ваш сайт использует механизм аутентификации по старому email и паролю.
На самом деле это ложь, поскольку бэкенд не обрабатывает пароль вообще, это зависит от разработчика, который должен подтвердить пароль, и правильным местом для этого является конвейер, сразу после того, как экземпляр пользователя был получен или создан.
Причина оставить обработку паролей разработчику заключается в том, что слишком много вещей действительно привязано к проекту, например, поле, в котором хранится пароль, обработка соли, алгоритм хэширования пароля и валидация. Поэтому просто добавьте функции конвейера, которые будут делать это в соответствии с потребностями вашего проекта.
Настройки бэкенда¶
SOCIAL_AUTH_EMAIL_FORM_URL = '/login-form/'
Используется для перенаправления пользователя на форму входа/регистрации, она должна иметь хотя бы одно поле с именем
email
. Форма должна отправляться по адресу/complete/email
, или если она отправляется в ваше представление, то ваше представление должно завершить процесс, вызвавsocial_core.actions.do_complete
.SOCIAL_AUTH_EMAIL_FORM_HTML = 'login_form.html'
Шаблон будет использоваться для отображения формы входа/регистрации для пользователя, он должен иметь по крайней мере одно поле с именем
email
. Отправка формы должна происходить по адресу/complete/email
, или если она переходит к вашему представлению, то ваше представление должно завершить процесс, вызвавsocial_core.actions.do_complete
.
Проверка электронной почты¶
Проверьте конвейер Валидация электронной почты в pipeline docs.
Работа с паролями¶
Вот пример обработки паролей, который можно добавить в конвейер:
def user_password(strategy, backend, user, is_new=False, *args, **kwargs):
if backend.name != 'email':
return
password = strategy.request_data()['password']
if is_new:
user.set_password(password)
user.save()
elif not user.validate_password(password):
# return {'user': None, 'social': None}
raise AuthForbidden(backend)