diff --git a/ai-hub/app/core/services/auth.py b/ai-hub/app/core/services/auth.py index 4573f3c..3aae6c7 100644 --- a/ai-hub/app/core/services/auth.py +++ b/ai-hub/app/core/services/auth.py @@ -110,7 +110,12 @@ oidc_id = decoded_id_token.get("sub") email = decoded_id_token.get("email") - username = decoded_id_token.get("name") or decoded_id_token.get("preferred_username") or email + + # Mapping: + # preferred_username -> username (fallback to email prefix) + # name -> full_name + username = decoded_id_token.get("preferred_username") or (email.split("@")[0] if email else "unknown") + full_name = decoded_id_token.get("name") if not all([oidc_id, email]): raise HTTPException(status_code=400, detail="Essential user data missing from ID token (sub and email required).") @@ -119,6 +124,7 @@ db=db, oidc_id=oidc_id, email=email, - username=username + username=username, + full_name=full_name ) return {"user_id": user_id, "linked": linked} diff --git a/ai-hub/app/core/services/user.py b/ai-hub/app/core/services/user.py index 8aeef7d..f5e3911 100644 --- a/ai-hub/app/core/services/user.py +++ b/ai-hub/app/core/services/user.py @@ -80,7 +80,7 @@ db.rollback() print(f"Failed to bootstrap local admin: {e}") - def save_user(self, db: Session, oidc_id: str, email: str, username: str) -> tuple[str, bool]: + def save_user(self, db: Session, oidc_id: str, email: str, username: str, full_name: str = None) -> tuple[str, bool]: """ Saves or updates a user record based on their OIDC ID or Email. Returns (user_id, linked_flag) @@ -92,6 +92,8 @@ if user_by_oidc: user_by_oidc.email = email user_by_oidc.username = username + if full_name: + user_by_oidc.full_name = full_name user_by_oidc.last_login_at = datetime.utcnow() # Check if user should be promoted to admin based on config @@ -107,7 +109,9 @@ if user_by_email: # Link the OIDC ID to the existing local account user_by_email.oidc_id = oidc_id - user_by_email.username = username # Prefer OIDC display name + user_by_email.username = username # Prefer OIDC preferred_username + if full_name: + user_by_email.full_name = full_name user_by_email.last_login_at = datetime.utcnow() db.commit() @@ -124,6 +128,7 @@ oidc_id=oidc_id, email=email, username=username, + full_name=full_name, role=role, group_id=default_group.id, created_at=datetime.utcnow(),