From 71cc8ef105b1b1ca23b9ff668660183725203925 Mon Sep 17 00:00:00 2001 From: swve Date: Thu, 3 Jul 2025 19:59:36 +0200 Subject: [PATCH] fix: google sign in issue --- apps/api/src/services/auth/utils.py | 49 +++++++++++++++++++++++------ 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/apps/api/src/services/auth/utils.py b/apps/api/src/services/auth/utils.py index aa6b0d17..c3549706 100644 --- a/apps/api/src/services/auth/utils.py +++ b/apps/api/src/services/auth/utils.py @@ -35,23 +35,52 @@ async def signWithGoogle( # Google google_user = await get_google_user_info(access_token) + # Use Google email with fallback to parameter email + user_email = google_user.get("email", email) + + # Validate we have a valid email + if not user_email: + raise HTTPException( + status_code=400, + detail="No email address available from Google or request" + ) + user = db_session.exec( - select(User).where(User.email == google_user["email"]) + select(User).where(User.email == user_email) ).first() if not user: - username = ( - google_user["given_name"] - + google_user["family_name"] - + str(random.randint(10, 99)) - ) + # Extract user data with safe defaults + given_name = google_user.get("given_name", "") + family_name = google_user.get("family_name", "") + picture = google_user.get("picture", "") + + # Generate username more robustly + username_parts = [] + if given_name: + username_parts.append(given_name) + if family_name: + username_parts.append(family_name) + + # If no name parts available, use part of email + if not username_parts and user_email and "@" in user_email: + email_prefix = user_email.split("@")[0] + if email_prefix: # Make sure it's not empty + username_parts.append(email_prefix) + + # If still no parts, use a default + if not username_parts: + username_parts.append("user") + + username = "".join(username_parts) + str(random.randint(10, 99)) + user_object = UserCreate( - email=google_user["email"], + email=user_email, username=username, password="", - first_name=google_user["given_name"], - last_name=google_user["family_name"], - avatar_image=google_user["picture"], + first_name=given_name, + last_name=family_name, + avatar_image=picture, ) if org_id is not None: