Реализация забытого пароля в Django - PullRequest
4 голосов
/ 31 марта 2011

Я пытаюсь реализовать функцию забытого пароля в моем приложении django.Я дал отдельный файл ForgottenPassword.html, где пользователь может указать свой адрес электронной почты;и если это письмо зарегистрировано (найдено в базе данных), соответствующий пароль этого письма выбирается и отправляется на его электронный идентификатор. Это то, чего я пытаюсь достичь.Будучи новичком в Django, я застрял в реализации.Это мой ForgottenPassword.html

<form name="forgotPassword" method="POST" id="myFormid" action="http://10.1.0.90:8080/forgotPassword/">
<div style="float:center;width:100%;">
 Enter your E-mail ID</label><br/> <input type="text" name="email" size="25" /> 
 <input type="submit" value="Submit" />
 </div> 
</form >

Мой метод в views.py это

def forgotPassword(request):
    if request.POST:
        email=request.POST.get("email")
        print email
        user = UniversityDetails.objects.filter(email=email)
        print user
        if(not user):
            print "No user"
            return render_to_response("forgotPassword.html")
        else:   

            ???????????????
            return render_to_response("passwordRecovery.html")
    return render_to_response('forgotPassword.html')

Вот что я пытаюсь достичьпередать идентификатор электронной почты, введенный в ForgottenPassword.html, и сохранить его в переменной «email».После этого извлеките все объекты с этим письмом из базы данных.и отфильтровать пароль от него.Я думаю, часть, где я положил ????должен быть заполнен запросом для получения пароля, соответствующего этому идентификатору электронной почты.Может ли кто-нибудь помочь мне сделать это.

Ответы [ 2 ]

21 голосов
/ 31 марта 2011

Существует (по замыслу) нет способа сделать это.Вы не можете получить пароль для пользователя, потому что он хранится в базе данных только в качестве безопасного хэша, и нет способа отменить этот хэш.

Однако Django предоставляет встроенный сброс реализация пароля в contrib.auth - см. документацию .

5 голосов
/ 31 марта 2011

rv_k, я просто хочу сказать, что я рекомендовал вам взглянуть на django.contrib.auth вместо вашей текущей системы, потому что вы храните пароли в виде открытого текста.

Тем не менее, чтобы ответить на ваш вопрос, вы уже запросили UniversityDetails запрос, соответствующий адресу электронной почты. Предполагая, что на одного пользователя приходится только 1 электронное письмо, используйте вместо него запрос get.

user = UniversityDetails.objects.get(email=email)
send_mail("Your PW", user.password, "admin@example.com", [email])
...