增加微信手机号登录。

This commit is contained in:
aaron 2025-01-14 23:42:58 +08:00
parent e4f7c11c28
commit 871260de3f
2 changed files with 16 additions and 16 deletions

View File

@ -1,6 +1,6 @@
from fastapi import APIRouter, HTTPException, Depends, Response, Body
from sqlalchemy.orm import Session
from app.models.user import UserLogin, UserInfo, VerifyCodeRequest, UserDB, UserUpdate, UserRole, UserPasswordLogin, ReferralUserInfo, generate_user_code
from app.models.user import UserLogin, UserInfo, ResetPasswordRequest,PhoneLoginRequest,VerifyCodeRequest, UserDB, UserUpdate, UserRole, UserPasswordLogin, ReferralUserInfo, generate_user_code
from app.models.coupon import CouponDB, UserCouponDB
from app.api.deps import get_current_user, get_admin_user
from app.models.database import get_db
@ -15,6 +15,7 @@ from app.core.security import create_access_token, set_jwt_cookie, clear_jwt_coo
from app.core.response import success_response, error_response, ResponseModel
from pydantic import BaseModel, Field
from typing import List
from typing import Optional
from datetime import datetime
router = APIRouter()
@ -31,14 +32,6 @@ redis_client = redis.Redis(
# 初始化短信客户端
client = UniSMS(settings.UNI_APP_ID)
# 添加 Mock 登录请求模型
class MockLoginRequest(BaseModel):
phone: str = Field(..., pattern="^1[3-9]\d{9}$")
class ResetPasswordRequest(BaseModel):
user_id: int
new_password: str = Field(..., min_length=6, max_length=20)
@router.post("/send-code")
async def send_verify_code(request: VerifyCodeRequest):
"""发送验证码"""
@ -135,16 +128,14 @@ async def get_user_info(
"""获取用户信息"""
return success_response(data=UserInfo.model_validate(current_user))
@router.post("/mock-login", response_model=ResponseModel)
async def mock_login(
request: MockLoginRequest,
@router.post("/phone-login", response_model=ResponseModel)
async def phone_login(
request: PhoneLoginRequest,
db: Session = Depends(get_db),
response: Response = None
):
"""Mock登录接口仅用于开发测试"""
if not settings.DEBUG:
return error_response(code=403, message="该接口仅在开发环境可用")
"""手机号登录 (用于微信)"""
# 查找或创建用户
user = db.query(UserDB).filter(UserDB.phone == request.phone).first()
if not user:
@ -155,6 +146,7 @@ async def mock_login(
username=f"user_{request.phone[-4:]}",
phone=request.phone,
user_code=user_code,
referral_code=request.referral_code,
roles=[UserRole.USER]
)
db.add(user)

View File

@ -57,6 +57,14 @@ class UserInfo(BaseModel):
class Config:
from_attributes = True
class PhoneLoginRequest(BaseModel):
phone: str = Field(..., pattern="^1[3-9]\d{9}$")
referral_code: Optional[str] = Field(None, min_length=6, max_length=6)
class ResetPasswordRequest(BaseModel):
user_id: int
new_password: str = Field(..., min_length=6, max_length=20)
class VerifyCodeRequest(BaseModel):
phone: str = Field(..., pattern="^1[3-9]\d{9}$")