This commit is contained in:
MarkLo 2025-12-13 06:50:03 +08:00
parent 7926eb74b4
commit 8b2dbe9437
2 changed files with 18 additions and 6 deletions

View File

@ -163,11 +163,15 @@ async def google_callback(
redirect_url = f"{frontend_url}/auth/callback?token={jwt_token}" redirect_url = f"{frontend_url}/auth/callback?token={jwt_token}"
return RedirectResponse(url=redirect_url) return RedirectResponse(url=redirect_url)
from pydantic import BaseModel
class TokenExchangeRequest(BaseModel):
code: str
redirect_uri: str
@router.post("/google/token") @router.post("/google/token")
async def exchange_google_token( async def exchange_google_token(
code: str, request: TokenExchangeRequest,
redirect_uri: str,
db: AsyncSession = Depends(get_db) db: AsyncSession = Depends(get_db)
): ):
""" """
@ -185,10 +189,10 @@ async def exchange_google_token(
token_response = await client.post( token_response = await client.post(
GOOGLE_TOKEN_URL, GOOGLE_TOKEN_URL,
data={ data={
"code": code, "code": request.code,
"client_id": client_id, "client_id": client_id,
"client_secret": client_secret, "client_secret": client_secret,
"redirect_uri": redirect_uri, "redirect_uri": request.redirect_uri,
"grant_type": "authorization_code", "grant_type": "authorization_code",
} }
) )

View File

@ -51,7 +51,14 @@ function AuthCallbackContent() {
if (!response.ok) { if (!response.ok) {
const errorData = await response.json(); const errorData = await response.json();
throw new Error(errorData.detail || "Failed to exchange token"); // Handle various error response formats
const errorMessage =
typeof errorData.detail === 'string' ? errorData.detail :
typeof errorData.error === 'string' ? errorData.error :
errorData.message ||
JSON.stringify(errorData) ||
"Failed to exchange token";
throw new Error(errorMessage);
} }
const data = await response.json(); const data = await response.json();
@ -59,7 +66,8 @@ function AuthCallbackContent() {
router.replace("/"); router.replace("/");
} catch (err: any) { } catch (err: any) {
console.error("Auth callback error:", err); console.error("Auth callback error:", err);
setError(err.message || "Authentication failed"); const msg = err.message || "Authentication failed";
setError(typeof msg === 'string' ? msg : "Authentication failed");
setIsProcessing(false); setIsProcessing(false);
} }
}; };