如何在Django中为不能使用密码的用户重置密码?

时间:2015-12-14 15:27:12

标签: django authentication

我有一个Web应用程序Django 1.4.3。我们允许用户以节目形式预订节目;这些用户是使用电子邮件和不可用的密码创建的(使用set_unusable_password())。现在,我们希望允许他们重置密码。但是,Django的内置重置形式不允许重置用户的密码不可用。我是否必须创建自己的表单?有哪些替代方案?或者我应该使用make_random_password吗?

auth项目的相关代码 -

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

感谢

1 个答案:

答案 0 :(得分:4)

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

对于Django 1.8+,覆盖get_users方法。

在您的情况下,对于Django 1.4,请覆盖clean_email方法。

然后将您的自定义表单包含在password_reset网址格式中,作为kwarg password_reset_form