我使用django.auth.contrib
作为基于会话的身份验证框架。
我已成功通过PasswordResetConfirmView
实现了重置密码功能,该功能要求将有效令牌发送到用户的电子邮件中以设置新密码。
path('password_reset/confirm/<uidb64>/<token>/',
auth_views.PasswordResetConfirmView.as_view(
template_name='accounts/password_reset/password_reset_confirm.html'),
name='password_reset_confirm'),
如果令牌有效,这可以正常工作。但是,如果令牌无效(例如,不正确或已过期),那么我可以预料地收到错误消息:
带有参数'('','')'的'password_reset_confirm'相反 找到了。尝试了1种模式: ['accounts / password_reset / confirm /(?P [^ /] +)/(?P [^ /] +)/ $']
为用户处理此异常的最佳实践是什么?理想情况下,我想捕获它并用“对不起,您的令牌无效”进行拦截。在django.contrib.auth
框架中是否存在执行此操作的方法?寻找最佳的DRY方法。
编辑我已经在模板中使用validlink
上下文。错误似乎早于此:
{% block content %}
<h1>{{ title }}</h1>
{% if validlink %}
<p>Please enter your new password twice so we can verify you typed it in correctly.</p>
<form method="post">{% csrf_token %}
<fieldset>
<div>
{{ form.new_password1.errors }}
<label for="id_new_password1">New password:</label>
{{ form.new_password1 }}
</div>
<div>
{{ form.new_password2.errors }}
<label for="id_new_password2">Confirm password:</label>
{{ form.new_password2 }}
</div>
<input type="submit" value="Change my password">
</fieldset>
</form>
{% else %}
<p>The password reset link was invalid, possibly because it has already been used. Please request a new password reset.</p>
{% endif %}
{% endblock %}