- 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)