BookSystem/backend/auth/utils/sms.py
jayhgq 81972f1328 feat(auth): 添加手机短信和邮箱注册功能
本次提交完成了用户认证模块的注册扩展:
1. 新增阿里云短信和异步邮件发送工具类
2. 新增短信/邮箱相关配置类与环境变量支持
3. 添加短信验证码、待注册数据的Redis缓存工具方法
4. 扩展用户登录逻辑,支持用户名/邮箱/手机号多方式登录
5. 实现手机短信注册和邮箱验证注册完整流程
6. 更新权限初始化数据与系统配置项
7. 补充相关Pydantic请求响应模型
8. 新增依赖包并完善requirements.txt
2026-06-14 22:19:33 +08:00

41 lines
1.3 KiB
Python

import random
from fastapi import HTTPException
from config import aliyun_sms_settings
def generate_sms_code() -> str:
"""生成6位数字验证码"""
return str(random.randint(100000, 999999))
async def send_sms_code(phone: str, code: str) -> bool:
"""通过阿里云发送短信验证码"""
try:
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
client = AcsClient(
aliyun_sms_settings.access_key,
aliyun_sms_settings.access_secret,
"cn-hangzhou",
)
request = CommonRequest()
request.set_accept_format("json")
request.set_domain("dysmsapi.aliyuncs.com")
request.set_method("POST")
request.set_version("2017-05-25")
request.set_action_name("SendSms")
request.add_query_param("PhoneNumbers", phone)
request.add_query_param("SignName", aliyun_sms_settings.sign_name)
request.add_query_param("TemplateCode", aliyun_sms_settings.template_code)
request.add_query_param("TemplateParam", f'{{"code":"{code}"}}')
response = client.do_action_with_exception(request)
return True
except Exception as e:
raise HTTPException(
status_code=500,
detail="短信发送失败,请稍后重试",
)