Django中忘记密码的实现

Posted

技术标签:

【中文标题】Django中忘记密码的实现【英文标题】:Forgotten password implementation in Django 【发布时间】:2011-07-26 18:47:29 【问题描述】:

我正在尝试在我的 django 应用程序中实现忘记密码的功能。我给出了一个单独的 forgetPassword.html,用户可以在其中提供他的电子邮件 ID;如果该电子邮件已注册(在数据库中找到),则会获取该电子邮件的相应密码并将其发送到他的电子邮件 ID。这就是我想要实现的。作为一个 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')

在这里,我尝试实现的是传递在 forgetPassword.html 中输入的电子邮件 ID 并将其保存在变量“电子邮件”中。之后从数据库中获取带有该电子邮件的所有对象。并从中过滤密码。我猜我放的部分????应填写查询以获取与该电子邮件 ID 对应的密码。有人可以帮我做这件事吗?

【问题讨论】:

我同意丹尼尔的观点。您必须首先找到将“实际”密码保存到数据库中的方法。但当然,您必须在这里处理安全问题。 【参考方案1】:

(按设计)没有办法这样做。您无法获取用户的密码,因为它仅作为安全哈希存储在数据库中,并且无法反转该哈希。

然而,Django 确实在 contrib.auth 中提供了一个内置的 reset 密码实现 - 请参阅 the documentation。

【讨论】:

【参考方案2】:

rv_k,我只想说我建议您查看 django.contrib.auth 而不是您当前的系统,因为您将密码存储为纯文本。

也就是说,为了回答您的问题,您已经提取了与电子邮件匹配的 UniversityDetails 查询。假设每个“用户”只有 1 封电子邮件,请改用 get 查询。

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

【讨论】:

非常感谢 Yujita。即使我做错了,我可以在你的帮助下暂时修复它。 @rv_k 做。不是。店铺。密码。在。清楚的。文本!或任何可恢复的格式。时期。这一点都不为过!

以上是关于Django中忘记密码的实现的主要内容,如果未能解决你的问题,请参考以下文章

Django通用类视图实现忘记密码重置密码功能

忘记了 django 和 graphql 的密码?

在django中忘记密码

django 的忘记密码接口

向 Django 2.1 管理站点添加忘记密码功能

django 开发忘记密码通过邮箱找回功能