sms_router.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. """
  2. 短信验证码路由
  3. """
  4. from fastapi import APIRouter, HTTPException, Request
  5. from pydantic import BaseModel
  6. from app.services.sms_service import sms_code_service
  7. router = APIRouter(prefix="/api/sms", tags=["短信验证码"])
  8. class SendCodeRequest(BaseModel):
  9. phone: str
  10. scene: str = "register" # register / login / reset_password
  11. @router.post("/send-code")
  12. async def send_code(body: SendCodeRequest, request: Request):
  13. """发送验证码"""
  14. phone = body.phone.strip()
  15. if not phone or len(phone) != 11 or not phone.isdigit():
  16. raise HTTPException(status_code=400, detail="手机号格式不正确")
  17. ok, msg = await sms_code_service.send_code(phone)
  18. if not ok:
  19. raise HTTPException(status_code=429, detail=msg)
  20. return {"code": 200, "message": msg}
  21. class VerifyCodeRequest(BaseModel):
  22. phone: str
  23. sms_code: str
  24. @router.post("/verify-code")
  25. async def verify_code(body: VerifyCodeRequest):
  26. """验证验证码是否正确(不删除,供两步流程第一步使用)"""
  27. phone = body.phone.strip()
  28. if not phone or len(phone) != 11 or not phone.isdigit():
  29. raise HTTPException(status_code=400, detail="手机号格式不正确")
  30. ok = await sms_code_service.verify_code(phone, body.sms_code, delete_after=False)
  31. if not ok:
  32. raise HTTPException(status_code=400, detail="验证码错误或已过期")
  33. return {"code": 200, "message": "验证成功"}