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

Django Rest与React邮箱验证链接端口错误致404问题咨询

问题根源

你遇到的404错误本质是:邮件内的激活链接默认取Django服务自身的运行地址localhost:8000作为域名,但/activate/<uid>/<token>是React端配置的前端路由,Django后端没有注册这个路径的GET接口,请求直接打到后端自然找不到对应资源返回404。

解决方案

两种方案选其一即可,都能实现点击邮件链接直接走通激活流程。

方案1:直接修改激活链接的生成域名,让链接默认指向前端地址

这是改造成本最低、最符合前后端分离架构设计的方案:

  • 如果你用djoser做认证模块,直接在settings.py中添加以下配置,覆盖默认的站点域名配置:
# settings.py
DJOSER = {
    "ACTIVATION_URL": "activate/{uid}/{token}",
    "DOMAIN": "localhost:3000", # 前端服务本地地址
    "SITE_NAME": "你的站点名称",
    "PROTOCOL": "http" # 上线部署时改成https
}
  • 如果你用django-allauth/dj-rest-auth做认证模块,在settings.py中添加:
# settings.py
ACCOUNT_EMAIL_CONFIRMATION_URL = "http://localhost:3000/activate/"
  • 如果你是自己实现的发信逻辑,不要用request.build_absolute_uri()方法拼接激活链接(这个方法会自动读取当前后端服务的域名端口),直接手动以前端地址为前缀拼接uid和token即可。
  • 如果你开启了Django自带的sites框架,也可以直接登录admin后台,把默认站点的域名从localhost:8000改成localhost:3000,效果和上面的配置一致。

配置完成后重新触发注册发信,新邮件里的链接会直接指向3000端口的前端激活页,点击后和你手动改端口的效果完全一致,前端拿到链接里的uid、token参数后调用后端激活接口即可完成校验。

方案2:后端添加重定向规则,自动把激活路径请求跳转到前端

如果你不想修改现有发信逻辑,可以直接在后端加路由规则,把打到8000端口激活路径的请求自动重定向到前端同路径地址:
直接在项目根路由文件urls.py的最顶部添加重定向路由(优先级要高于其他原有路由):

from django.views.generic import RedirectView
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    # 激活路径重定向规则
    path(
        "activate/<uidb64>/<token>",
        RedirectView.as_view(url="http://localhost:3000/activate/%(uidb64)s/%(token)s"),
        name="activate-redirect"
    ),
    # 以下是你原有的路由配置
    path("admin/", admin.site.urls),
    path("api/", include("your_api_module.urls")),
    # ... 其他原有路由
]

配置生效后,就算邮件里的链接是8000端口的,用户点击后后端会返回302重定向到3000端口的对应前端页面,全程不需要用户手动改地址,也能正常走通激活流程。

上线注意

本地开发调试完成后正式部署时,只需要把上述配置里的localhost:3000替换成你实际的前端线上域名,http替换为https即可,不需要改动其他业务逻辑。

内容的提问来源于stack exchange,提问作者Максим Тищук

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:15:52