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
相关产品推荐
相关产品推荐

