修复部分报错
This commit is contained in:
@@ -8,9 +8,11 @@ from app.database import User
|
||||
from app.database.auth import OAuthToken, V1APIKeys
|
||||
from app.models.oauth import OAuth2ClientCredentialsBearer
|
||||
|
||||
from .database import Database
|
||||
from .api_version import APIVersion
|
||||
from .database import Database, get_redis
|
||||
|
||||
from fastapi import Depends, HTTPException
|
||||
from redis.asyncio import Redis
|
||||
from fastapi.security import (
|
||||
APIKeyQuery,
|
||||
HTTPBearer,
|
||||
@@ -97,13 +99,40 @@ async def get_client_user_no_verified(user_and_token: UserAndToken = Depends(get
|
||||
return user_and_token[0]
|
||||
|
||||
|
||||
async def get_client_user(db: Database, user_and_token: UserAndToken = Depends(get_client_user_and_token)):
|
||||
async def get_client_user(
|
||||
db: Database,
|
||||
redis: Annotated[Redis, Depends(get_redis)],
|
||||
api_version: APIVersion,
|
||||
user_and_token: UserAndToken = Depends(get_client_user_and_token)
|
||||
):
|
||||
from app.service.verification_service import LoginSessionService
|
||||
|
||||
user, token = user_and_token
|
||||
|
||||
if await LoginSessionService.check_is_need_verification(db, user.id, token.id):
|
||||
raise HTTPException(status_code=403, detail="User not verified")
|
||||
# 获取当前验证方式
|
||||
verify_method = None
|
||||
if api_version >= 20250913:
|
||||
verify_method = await LoginSessionService.get_login_method(user.id, token.id, redis)
|
||||
|
||||
if verify_method is None:
|
||||
# 智能选择验证方式(有TOTP优先TOTP)
|
||||
totp_key = await user.awaitable_attrs.totp_key
|
||||
if totp_key is not None and api_version >= 20240101:
|
||||
verify_method = "totp"
|
||||
else:
|
||||
verify_method = "mail"
|
||||
|
||||
# 设置选择的验证方法到Redis中,避免重复选择
|
||||
if api_version >= 20250913:
|
||||
await LoginSessionService.set_login_method(user.id, token.id, verify_method, redis)
|
||||
|
||||
# 返回符合 osu! API 标准的错误响应
|
||||
error_response = {
|
||||
"error": "User not verified",
|
||||
"method": verify_method
|
||||
}
|
||||
raise HTTPException(status_code=401, detail=error_response)
|
||||
return user
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user