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

如何在dj-rest-auth中自定义邮箱验证邮件以适配移动应用场景

解决方案

dj-rest-auth的邮件验证逻辑底层依赖django-allauth的账户验证模块,你可以通过两种途径拿到单独的token注入模板:

方案1:覆写邮箱确认的邮件发送适配器(最推荐,改动最小)

  • django-allauth默认使用DefaultAccountAdapter处理邮件发送逻辑,你可以自定义继承该类的适配器,重写send_confirmation_mail方法,把token单独拆出来传给模板上下文
  • 操作步骤:
    1. 在你的Django应用下新建adapters.py,写入以下代码:
from allauth.account.adapter import DefaultAccountAdapter
from allauth.account.utils import user_pk_to_url_str

class CustomAccountAdapter(DefaultAccountAdapter):
    def send_confirmation_mail(self, request, emailconfirmation, signup):
        activate_url = self.get_email_confirmation_url(request, emailconfirmation)
        # 单独提取验证token和用户ID注入上下文
        ctx = {
            "user": emailconfirmation.email_address.user,
            "activate_url": activate_url,
            "key": emailconfirmation.key, # 这个就是你需要的独立验证token
            "user_id": user_pk_to_url_str(emailconfirmation.email_address.user),
            "signup": signup,
        }
        # 邮件发送逻辑保持原生逻辑不变
        if signup:
            email_template = "account/email/email_confirmation_signup"
        else:
            email_template = "account/email/email_confirmation"
        self.send_mail(email_template, emailconfirmation.email_address.email, ctx)
  1. 在settings.py中注册自定义适配器,添加配置:
ACCOUNT_ADAPTER = '你的应用名.adapters.CustomAccountAdapter'
  1. 之后你在自定义的email_confirmation_message.txt模板里就可以直接调用{{ key }}变量拿到单独的验证token,直接展示给用户即可。

方案2:从默认激活链接截取token(临时应急方案)

  • 如果你暂时不想修改后端逻辑,可以直接在Django模板中用过滤器截取active_url的末尾字段,默认激活链接的格式为域名/验证路径/<token>/,模板写法参考:
{% with token=activate_url|split:'/'|last %}
你的邮箱验证令牌是:{{ token }}
{% endwith %}

注意该方案依赖激活链接的路径格式不发生变化,如果后续调整了验证接口路由规则会失效,不推荐长期使用

配套验证逻辑说明

你需要给移动端提供对应的邮箱验证接口,接收用户输入的key和用户标识(邮箱/用户ID),调用dj-rest-auth原生的验证逻辑即可完成校验,原生验证接口本身就支持单独传token参数校验,不需要修改核心验证逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:02