Django password_reset Проверка формы электронной почты - PullRequest
0 голосов
/ 23 октября 2018

Django password_reset Form не проверяет, существует ли электронная почта или нет.Также проверяет форму любого адреса электронной почты.

Вопрос в том, как проверить и выдать ошибку для несуществующих электронных писем с пользовательской формой?

Кстати, я нашел решение ниже в здесь но это не работает для меня. (используя Django 2.1) .И если это сработает, я не смог найти то, что мне не хватает.

forms.py

class EmailValidationOnForgotPassword(PasswordResetForm):
def clean_email(self):
    email = self.cleaned_data['email']
    if not User.objects.filter(email__iexact=email, is_active=True).exists():
        raise ValidationError("There is no user registered with the specified email address!")

    return email

urls.py

path('sifre-sifirla/', PasswordResetView.as_view(), {'password_reset_form':EmailValidationOnForgotPassword}, name='password_reset'),

Заранее спасибо.

РЕДАКТИРОВАТЬ:

Для информации других пользователей, на вопрос отвечает @Alasdair и работает, но @pypypy 'Точка зрения также важна.

изменения в urls.py , как показано ниже:

path('sifre-sifirla/', PasswordResetView.as_view(form_class=EmailValidationOnForgotPassword), name='password_reset'),

1 Ответ

0 голосов
/ 15 марта 2019

Подводя итог вышеприведенному обсуждению с частями, взятыми из @ Alasdair

#forms.py
from django.contrib.auth.forms import PasswordResetForm

class EmailValidationOnForgotPassword(PasswordResetForm):

    def clean_email(self):
        email = self.cleaned_data['email']
        if not User.objects.filter(email__iexact=email, is_active=True).exists():
            msg = _("There is no user registered with the specified E-Mail address.")
            self.add_error('email', msg)
        return email

И

#urls.py
from accounts.forms import EmailValidationOnForgotPassword

path('sifre-sifirla/', PasswordResetView.as_view(form_class=EmailValidationOnForgotPassword), name='password_reset'),

@ pypypy, правильно сказать, что этот подход можно использовать для получения имен пользователей.Один из способов уменьшить эту проблему - ответить 429 Too Many Requests, как только пользователь попробует 3 разных электронных письма.Это может быть достигнуто с использованием, например, django-ratelimit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...