Spaces:
Sleeping
Sleeping
Commit
·
0a06f26
1
Parent(s):
dbeb044
Fix HF user info parsing and OAuth scope issues
Browse files- Add detailed logging for HF API user info response
- Improve username field detection with fallbacks
- Fix OAuth scope to use only supported 'read-repos'
- Handle multiple possible field names from HF API
- Better error handling for missing user data fields
- backend/routers/auth.py +15 -4
backend/routers/auth.py
CHANGED
|
@@ -91,7 +91,7 @@ async def login(request: Request):
|
|
| 91 |
f"?client_id={oauth_config['client_id']}"
|
| 92 |
f"&redirect_uri={redirect_uri}"
|
| 93 |
f"&response_type=code"
|
| 94 |
-
f"&scope=
|
| 95 |
f"&state={state}"
|
| 96 |
)
|
| 97 |
|
|
@@ -174,17 +174,28 @@ async def oauth_callback(request: Request, code: str, state: str):
|
|
| 174 |
user_response.raise_for_status()
|
| 175 |
user_info = user_response.json()
|
| 176 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
except requests.RequestException as e:
|
| 178 |
logger.error(f"User info fetch failed: {e}")
|
| 179 |
raise HTTPException(status_code=400, detail="Failed to fetch user information")
|
| 180 |
|
| 181 |
# Store user in session
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
user_data = {
|
| 183 |
"id": user_info.get("id"),
|
| 184 |
-
"name": user_info.get("name"),
|
| 185 |
-
"username":
|
| 186 |
"email": user_info.get("email"),
|
| 187 |
-
"avatar_url": user_info.get("avatarUrl"),
|
| 188 |
"access_token": access_token, # Store for future API calls if needed
|
| 189 |
"auth_method": "oauth"
|
| 190 |
}
|
|
|
|
| 91 |
f"?client_id={oauth_config['client_id']}"
|
| 92 |
f"&redirect_uri={redirect_uri}"
|
| 93 |
f"&response_type=code"
|
| 94 |
+
f"&scope=read-repos" # Use only supported scope
|
| 95 |
f"&state={state}"
|
| 96 |
)
|
| 97 |
|
|
|
|
| 174 |
user_response.raise_for_status()
|
| 175 |
user_info = user_response.json()
|
| 176 |
|
| 177 |
+
# Debug: log user info structure
|
| 178 |
+
logger.info(f"🔍 HF User info received: {list(user_info.keys())}")
|
| 179 |
+
logger.info(f"📝 User details - id: {user_info.get('id')}, name: {user_info.get('name')}, login: {user_info.get('login')}")
|
| 180 |
+
|
| 181 |
except requests.RequestException as e:
|
| 182 |
logger.error(f"User info fetch failed: {e}")
|
| 183 |
raise HTTPException(status_code=400, detail="Failed to fetch user information")
|
| 184 |
|
| 185 |
# Store user in session
|
| 186 |
+
# Try multiple fields for username as HF API might use different field names
|
| 187 |
+
username = (user_info.get("login") or
|
| 188 |
+
user_info.get("username") or
|
| 189 |
+
user_info.get("name") or
|
| 190 |
+
user_info.get("id") or
|
| 191 |
+
"unknown_user")
|
| 192 |
+
|
| 193 |
user_data = {
|
| 194 |
"id": user_info.get("id"),
|
| 195 |
+
"name": user_info.get("name") or user_info.get("fullName") or username,
|
| 196 |
+
"username": username,
|
| 197 |
"email": user_info.get("email"),
|
| 198 |
+
"avatar_url": user_info.get("avatarUrl") or user_info.get("avatar"),
|
| 199 |
"access_token": access_token, # Store for future API calls if needed
|
| 200 |
"auth_method": "oauth"
|
| 201 |
}
|