Django中的密码重置功能实现

4

我正在尝试在我的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”中输入的电子邮件ID传递并保存在变量“ email”中。然后从数据库中获取所有具有该电子邮件的对象,并过滤出密码。 我猜我放置???? 的部分应该填写一个查询,以获取与该电子邮件ID对应的密码。 有人能帮我做到这一点吗。


我同意丹尼尔的看法。你必须先找到一种方法将“实际”的密码保存到数据库中。但当然,在这里你必须处理安全问题。 - gladysbixly
2个回答

20

根据设计,没有办法这样做。您无法获取用户的密码,因为它只以安全哈希的形式存储在数据库中,而且无法反向解密该哈希。

然而,Django在contrib.auth中提供了内置的重置密码实现 - 请参见文档


5

rv_k,我想说我建议你查看django.contrib.auth而不是你当前的系统,因为你正在以明文形式存储密码。

话虽如此,为了回答你的问题,你已经拉取了匹配电子邮件的UniversityDetails查询。假设每个“用户”只有一个电子邮件,请改用get查询。

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

非常感谢你,Yujita。即使我做错了,有你的帮助我也暂时解决了问题。 - rv_k
2
@rv_k 不要以明文形式或任何可恢复的格式存储密码!这一点无论如何都不能过分强调! - frnhr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接