Получение учетных данных пользователя по электронной почте
Я делаю небольшое решение для восстановления учетных данных пользователя. Я решил попробовать сделать это с помощью своего алгоритма. Я запрашиваю почту пользователя и сравниваю ее с базой данных почтовых адресов. Если почта существует, то я хочу отправить пользователю его учетные данные (логин и пароль). Я уже сделал прием и проверку почты, а также настроил отправку писем на почтовые адреса. Но как получить доступ к учетным данным, имея только почту и тот факт, что пользователь не вошел в систему, я не понимаю. Я знаю, что возможно мое решение, основанное на безопасности, не очень хорошее, но возник интерес и я действительно хочу понять, как это сделать.
Можно ли сделать быстрый логин и получать данные оттуда, или можно обойтись без него? В результате мне приходится отправлять используемые как сообщение в views.py эти данные.
views.py
def recovery(request):
if request.user.is_authenticated:
return redirect("/accounts/exit/")
else:
if request.method == 'POST':
email_form = UserRecoveryForm(request.POST)
if email_form.is_valid():
email = email_form.cleaned_data['email']
try:
send_mail("Восстановление учетных данных.", "message", "from@gmail.com", [email], fail_silently=False)
except BadHeaderError:
return HttpResponse('Ошибка в теме письма.')
return render(request, 'registration/recovery_done.html')
else:
email_form = UserRecoveryForm()
return render(request, 'registration/recovery.html', {'email_form': email_form})
На всякий случай forms.py
class UserRecoveryForm(forms.ModelForm):
email = forms.EmailField(label='Почта', help_text='На почту мы отправим дополнительную информация в случае необходимости')
class Meta:
model = User
fields = ('email',)
def clean_email(self):
email = self.cleaned_data.get('email')
username = self.cleaned_data.get('username')
if (not(email and User.objects.filter(email=email).exclude(username=username).exists())):
raise forms.ValidationError('Такой почты не существует.')
return email