Django-allauth可发送验证邮件但无法发送密码重置邮件问题求助
问题根因
你的模板存在HTML表单嵌套错误,这是密码重置请求无法触发后台逻辑的直接原因。
HTML标准禁止<form>标签嵌套使用,你当前代码外层已存在指向登录接口的表单,内部嵌套的密码重置表单会被浏览器忽略,点击提交按钮时实际请求的是登录接口,自然不会触发密码重置邮件发送逻辑。
修复方案
1. 修复模板表单结构
删除外层无用的登录表单标签,仅保留密码重置表单,修复后模板核心代码参考:
<body class="login-page container-fluid"> <div class="row vygr-login"> <div class="user_card"> <div class="container-fluid h-100"> <div class="row h-100"> <div class="form_container col vygr-signup-container"> {% load i18n %} {% if user.is_authenticated %} {% include "account/snippets/already_logged_in.html" %} {% endif %} <p class="registration-element" style="font-size: 2rem;">{% trans "Trouble Logging In?" %}</p> <p class=" registration-element">{% trans "Enter your email and we'll send you a link to get back into your account." %}</p> <form method="POST" action="{% url 'account_reset_password' %}" class="password_reset"> {% csrf_token %} {% for field in form %} {{ field.errors }} {{ field }} {% endfor %} <input class="signup-button" type="submit" value="{% trans 'Reset My Password' %}"> <p class="" style="text-align: center;">{% blocktrans %}Please contact us if you have any trouble resetting your password.{% endblocktrans %}</p> </form> </div> </div> </div> </div> </div> </body>
2. 额外配置检查
如果修复表单后仍有问题,逐一核对以下配置:
- 确认
settings.py中开启密码重置功能,添加配置ACCOUNT_PASSWORD_RESET = True - 确认主路由
urls.py中已包含allauth的完整路由:path('accounts/', include('allauth.urls')) - 测试时输入已注册的账号邮箱,allauth默认不会向未注册邮箱发送重置邮件,也不会显式提示邮箱不存在(规避账号枚举风险)
内容的提问来源于stack exchange,提问作者vygrdev
相关产品推荐
相关产品推荐

