本次提交完成了用户认证模块的注册扩展: 1. 新增阿里云短信和异步邮件发送工具类 2. 新增短信/邮箱相关配置类与环境变量支持 3. 添加短信验证码、待注册数据的Redis缓存工具方法 4. 扩展用户登录逻辑,支持用户名/邮箱/手机号多方式登录 5. 实现手机短信注册和邮箱验证注册完整流程 6. 更新权限初始化数据与系统配置项 7. 补充相关Pydantic请求响应模型 8. 新增依赖包并完善requirements.txt
41 lines
1.3 KiB
Python
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="短信发送失败,请稍后重试",
|
|
)
|