заставить django отправить электронное письмо для сброса пароля, даже если для пользователя не установлен пароль - PullRequest
0 голосов
/ 09 июля 2020

Django автоматически завершается ошибкой и не отправляет электронные письма для сброса пароля, если для пользователя не установлен полезный пароль. Как мы переопределим это условие?

Django предполагает, что эта аутентификация LDAP должна использоваться в случае, если пароль не установлен. Но в нашем случае пользователи могут входить в систему через социальную аутентификацию, которая не устанавливает пароль для пользователей. Сброс пароля по электронной почте - единственный вариант, если они используют sh для входа в систему с помощью электронной почты и пароля. Как это сделать?

Один из возможных методов - установить случайный пароль во время регистрации пользователя, но мы не хотим этого делать, поскольку это не очень интуитивно понятно.

Каталожные номера:

1 Ответ

2 голосов
/ 09 июля 2020

Вот что вам нужно сделать. Проверить https://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/forms/

класс PasswordResetForm имеет метод get_users:

def get_users(self, email):

    """Given an email, return matching user(s) who should receive a reset.

    This allows subclasses to more easily customize the default policies
    that prevent inactive users and users with unusable passwords from
    resetting their password.

    """
    active_users = get_user_model()._default_manager.filter(
        email__iexact=email, is_active=True)
    return (u for u in active_users if u.has_usable_password())

Замените этот метод этой функцией:

def get_users(self, email):

    """Given an email, return matching user(s) who should receive a reset.

    This allows subclasses to more easily customize the default policies
    that prevent inactive users and users with unusable passwords from
    resetting their password.

    """
    active_users = get_user_model()._default_manager.filter(
        email__iexact=email, is_active=True)
    return active_users

To сделав это, вы создадите собственную форму и переопределите этот метод.

class PasswordResetFormAllowNoPassword(PasswordResetForm):

    def get_users(self, email):
        active_users = get_user_model()._default_manager.filter(
            email__iexact=email, is_active=True)
        return active_users
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...