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

Django-phone-auth如何发送邮箱验证邮件与手机验证短信

django-phone-auth 验证消息发送实现方案

问题说明

使用django-phone-auth库做身份认证时,参照官方文档编写信号监听逻辑发送邮箱、手机号验证消息,代码运行后仅在控制台输出数字2,无实际消息发送效果。

官方信号参考模板

库本身通过信号机制抛出验证触发事件,需要开发者自行监听信号实现消息发送,官方给出的监听模板如下:

# 邮箱验证信号
from django.dispatch import receiver
from phone_auth.signals import verify_email

@receiver(verify_email)
def verify_email_signal(sender, user, url, email, **kwargs):
    # 此处编写发邮件逻辑
    pass


# 手机号验证信号
from django.dispatch import receiver
from phone_auth.signals import verify_phone

@receiver(verify_phone)
def verify_phone_signal(sender, user, url, phone, **kwargs):
    # 此处编写发短信逻辑
    pass

正确实现步骤

  • 注册信号接收器
    写好的信号处理代码必须手动注册,否则Django启动时不会加载,信号触发时不会执行你的发送逻辑。控制台输出的数字2是库默认调试模式下的控制台打印内容,和你写的代码无关。
    注册方式:在对应业务app的apps.py的ready()方法中导入信号文件,示例:
    from django.apps import AppConfig
    
    class YourAppConfig(AppConfig):
        default_auto_field = 'django.db.models.BigAutoField'
        name = 'your_app_name'
    
        def ready(self):
            # 导入存放信号处理逻辑的文件
            import your_app_name.signals
    
  • 修正代码语法与参数错误
    之前编写的代码存在两个基础问题:一是send_sms方法没有正确缩进,不属于信号处理函数的内部逻辑,根本不会执行;二是取手机号的方式错误,信号回调入参里的phone就是待验证的目标号码,不需要从user对象上取,且短信内容必须携带入参里的url验证链接,否则用户无法完成验证。
    修正后的短信发送代码:
    from django.dispatch import receiver
    from phone_auth.signals import verify_phone
    from sms import send_sms
    
    @receiver(verify_phone)
    def verify_phone_signal(sender, user, url, phone, **kwargs):
        send_sms(
            f'您的账号验证链接:{url},10分钟内有效',
            '+平台官方发信号码',
            [phone],
            fail_silently=False
        )
    
  • 邮箱验证逻辑参考
    邮箱发送直接复用Django自带的邮件能力即可,同样需要携带验证链接:
    from django.core.mail import send_mail
    from django.dispatch import receiver
    from phone_auth.signals import verify_email
    
    @receiver(verify_email)
    def verify_email_signal(sender, user, url, email, **kwargs):
        send_mail(
            subject='账号邮箱验证',
            message=f'点击链接完成邮箱验证:{url},链接有效期10分钟',
            from_email='平台官方发件邮箱',
            recipient_list=[email],
            fail_silently=False
        )
    
  • 关闭调试模式
    在项目settings.py中添加配置PHONE_AUTH_DEBUG = False,否则库会默认将验证信息输出到控制台,不会触发自定义的消息发送逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 05:24:28