使用PasswordResetConfirmView时如何处理错误

时间:2019-08-26 21:14:58

标签: django django-views

我使用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 %}

0 个答案:

没有答案