You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:48:03