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

使用Django-Verify-Email配置邮箱验证时链接无效问题求助

问题原因

你当前代码的核心问题是调用send_verification_email的时机错误:在form.save()之前发送验证邮件,此时用户实例还未被保存到数据库中,生成的验证token无法关联到有效用户,导致点击链接时验证失败。

修复步骤
  1. 调整方法调用顺序:先保存用户实例到数据库,再基于已保存的实例发送验证邮件,这样生成的token才能对应到真实存在的用户。
  2. 修改后的signup函数代码:
def signup(request, form_class, template_name, success_message, redirect_url):
    if request.user.is_authenticated:
        return redirect(redirect_url)
    form = form_class()

    if request.method == 'POST':
        form = form_class(request.POST)
        if form.is_valid():
            # 先保存用户到数据库,获取实例对象
            user = form.save()
            # 基于已保存的用户实例发送验证邮件
            send_verification_email(request, user)
            messages.success(request, success_message)
            return redirect(redirect_url)
        else:
            messages.error(request, 'Error creating account. Please check the form.')
            return render(request, template_name, {'form': form})

    context = {'form': form}
    return render(request, template_name, context)
额外检查项
  • 确认你的StudentRegistrationForm在save()方法中正确返回用户实例(比如继承自UserCreationForm的表单默认会返回实例)。
  • 检查项目配置中的邮件参数(EMAIL_BACKEND、EMAIL_HOST等)是否正确,确保邮件发送的链接域名与ALLOWED_HOSTS、SITE_DOMAIN配置匹配。
  • 确保使用的Django-Verify-Email包是最新版本,避免版本兼容问题。

内容的提问来源于stack exchange,提问作者foliwe83

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:52:05