import hashlib from django.contrib.auth.forms import PasswordResetForm from django.contrib.auth.hashers import check_password from django import forms from django.utils.translation import gettext, gettext_lazy as _ from .models import Account class HashedEmailPasswordResetForm(PasswordResetForm): username = forms.CharField(label=_('Username'), max_length=254) def get_users(self, email): accounts = Account.objects.filter( user__username=self.cleaned_data['username'] ) return (a.user for a in accounts if a.user.has_usable_password() and (check_password(email, a.hashed_email) or a.user.email == email))