如何允许Django中密码不可用的用户重置密码?

如何允许Django中密码不可用的用户重置密码?,django,authentication,Django,Authentication,我有一个web应用程序Django 1.4.3。我们允许用户以嘉宾身份预订展会;这些用户是使用电子邮件和不可用密码创建的(使用set_unusable_password()。现在,我们希望允许他们重置密码。但是,Django的内置重置表单不允许使用不可用的密码重置用户的密码。我必须创建自己的表单吗?有哪些替代方案?还是应该使用make_random_密码 来自auth项目的相关代码- if any((user.password == UNUSABLE_PASSWORD) f

我有一个web应用程序Django 1.4.3。我们允许用户以嘉宾身份预订展会;这些用户是使用电子邮件和不可用密码创建的(使用set_unusable_password()。现在,我们希望允许他们重置密码。但是,Django的内置重置表单不允许使用不可用的密码重置用户的密码。我必须创建自己的表单吗?有哪些替代方案?还是应该使用make_random_密码

来自auth项目的相关代码-

if any((user.password == UNUSABLE_PASSWORD)
           for user in self.users_cache):
            raise forms.ValidationError(self.error_messages['unusable'])

谢谢

如果用户当前密码不可用,默认的
密码重置表单
不允许用户重置密码。但是,您可以对表单进行子类化,并重写执行此检查的方法

对于Django 1.8+,重写该方法

在您的例子中,对于Django 1.4,重写该方法


然后在
密码重置
url模式中包含您的自定义表单,如kwarg
密码重置
表单

谢谢!将尝试您的建议。成功实施!干杯@打破宪法请接受这个答案:)@alasdair在Django 2.0中这仍然是处理这个问题的最佳方式吗?为了让这项功能发挥作用,我们希望得到帮助:)@franciscojavierarceo覆盖
get_用户的Django 1.8方法仍然有效,它仍然存在于即将发布的Django 3.0版本中。如果你需要更多的帮助,最好问一个新问题。