如何更改 Django 身份验证视图 "PasswordResetView" 以发送重发 link 到手机号码和电子邮件?
How to change Django Authentication View "PasswordResetView" to send resent link to mobile number and email?
我有一个自定义用户模型和自定义后端,用于通过手机号码和电子邮件进行身份验证。
我想让我的用户能够通过电子邮件和手机号码重设密码,即在 PasswordResetView 上,我想同时提供重设密码的选项和发送的重设密码 link手机号码和电子邮件。
我将我的 Django 项目配置为使用 Twilio 发送消息。
我的问题是如何更改 PasswordResetView 才能做到这一点。
我们需要覆盖视图 PasswordResetView 的 form_class。
####### Your views.py #######
class PasswordResetViewOverride(auth_views.PasswordResetView):
form_class = PasswordResetFormOverride
然后为了实现身份验证自定义逻辑,我们需要覆盖 PasswordResetView 具有的默认 form_class 的保存方法,即 PasswordResetForm. This class has a save method 我们需要覆盖它。此外,我们可以编写其自定义 clean 方法并添加任何其他字段,在本例中为手机号码字段。
在用手机号码字段抓取用户后,我们可以为他们生成令牌,如图 here 所示。有了这个令牌,我们将创建一个 link 并使用任何消息传递客户端(如 Twilio)发送到用户的手机号码。
class PasswordResetFormOverride(PasswordResetForm):
mobile_no = forms.CharField(
label="Your Accounts' Mobile Number",
max_length=10,
widget=forms.NumberInput(),
required=False,
)
def save(self, domain_override=None,
subject_template_name='registration/password_reset_subject.txt',
email_template_name='registration/password_reset_email.html',
use_https=False, token_generator=default_token_generator,
from_email=None, request=None, html_email_template_name=None,
extra_email_context=None):
mobile_no = self.cleaned_data.get("mobile_no", "")
# All the previous stuff
if mobile_no != "":
# Send reset link to mobile logic
# All the previous stuff
我有一个自定义用户模型和自定义后端,用于通过手机号码和电子邮件进行身份验证。
我想让我的用户能够通过电子邮件和手机号码重设密码,即在 PasswordResetView 上,我想同时提供重设密码的选项和发送的重设密码 link手机号码和电子邮件。
我将我的 Django 项目配置为使用 Twilio 发送消息。
我的问题是如何更改 PasswordResetView 才能做到这一点。
我们需要覆盖视图 PasswordResetView 的 form_class。
####### Your views.py #######
class PasswordResetViewOverride(auth_views.PasswordResetView):
form_class = PasswordResetFormOverride
然后为了实现身份验证自定义逻辑,我们需要覆盖 PasswordResetView 具有的默认 form_class 的保存方法,即 PasswordResetForm. This class has a save method 我们需要覆盖它。此外,我们可以编写其自定义 clean 方法并添加任何其他字段,在本例中为手机号码字段。 在用手机号码字段抓取用户后,我们可以为他们生成令牌,如图 here 所示。有了这个令牌,我们将创建一个 link 并使用任何消息传递客户端(如 Twilio)发送到用户的手机号码。
class PasswordResetFormOverride(PasswordResetForm):
mobile_no = forms.CharField(
label="Your Accounts' Mobile Number",
max_length=10,
widget=forms.NumberInput(),
required=False,
)
def save(self, domain_override=None,
subject_template_name='registration/password_reset_subject.txt',
email_template_name='registration/password_reset_email.html',
use_https=False, token_generator=default_token_generator,
from_email=None, request=None, html_email_template_name=None,
extra_email_context=None):
mobile_no = self.cleaned_data.get("mobile_no", "")
# All the previous stuff
if mobile_no != "":
# Send reset link to mobile logic
# All the previous stuff