增加微信手机号登录。

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 fastapi import APIRouter, HTTPException, Depends, Response, Body
from sqlalchemy.orm import Session 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.models.coupon import CouponDB, UserCouponDB
from app.api.deps import get_current_user, get_admin_user from app.api.deps import get_current_user, get_admin_user
from app.models.database import get_db 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 app.core.response import success_response, error_response, ResponseModel
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from typing import List from typing import List
from typing import Optional
from datetime import datetime from datetime import datetime
router = APIRouter() router = APIRouter()
@ -31,14 +32,6 @@ redis_client = redis.Redis(
# 初始化短信客户端 # 初始化短信客户端
client = UniSMS(settings.UNI_APP_ID) 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") @router.post("/send-code")
async def send_verify_code(request: VerifyCodeRequest): 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)) return success_response(data=UserInfo.model_validate(current_user))
@router.post("/mock-login", response_model=ResponseModel) @router.post("/phone-login", response_model=ResponseModel)
async def mock_login( async def phone_login(
request: MockLoginRequest, request: PhoneLoginRequest,
db: Session = Depends(get_db), db: Session = Depends(get_db),
response: Response = None response: Response = None
): ):
"""Mock登录接口仅用于开发测试""" """手机号登录 (用于微信)"""
if not settings.DEBUG:
return error_response(code=403, message="该接口仅在开发环境可用")
# 查找或创建用户 # 查找或创建用户
user = db.query(UserDB).filter(UserDB.phone == request.phone).first() user = db.query(UserDB).filter(UserDB.phone == request.phone).first()
if not user: if not user:
@ -155,6 +146,7 @@ async def mock_login(
username=f"user_{request.phone[-4:]}", username=f"user_{request.phone[-4:]}",
phone=request.phone, phone=request.phone,
user_code=user_code, user_code=user_code,
referral_code=request.referral_code,
roles=[UserRole.USER] roles=[UserRole.USER]
) )
db.add(user) db.add(user)

View File

@ -57,6 +57,14 @@ class UserInfo(BaseModel):
class Config: class Config:
from_attributes = True 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): class VerifyCodeRequest(BaseModel):
phone: str = Field(..., pattern="^1[3-9]\d{9}$") phone: str = Field(..., pattern="^1[3-9]\d{9}$")