Spaces:
Sleeping
Sleeping
testcoder-ui commited on
Commit ·
763d966
1
Parent(s): 004d952
Clean up OAuth: simplify username detection to use session only
Browse files
app.py
CHANGED
|
@@ -225,86 +225,34 @@ def check_user_access(request: gr.Request) -> Tuple[str, bool]:
|
|
| 225 |
return "", False
|
| 226 |
|
| 227 |
# 获取登录用户名
|
| 228 |
-
# 在 Hugging Face Space 中,OAuth
|
| 229 |
username = None
|
| 230 |
|
| 231 |
-
#
|
| 232 |
if hasattr(request, 'request') and hasattr(request.request, 'session'):
|
| 233 |
session = request.request.session
|
| 234 |
-
|
|
|
|
| 235 |
if 'oauth_info' in session:
|
| 236 |
oauth_info = session.get('oauth_info', {})
|
| 237 |
username = oauth_info.get('preferred_username') or oauth_info.get('name') or oauth_info.get('sub')
|
| 238 |
if username:
|
| 239 |
logger.info(f"从 session['oauth_info'] 获取用户名: {username}")
|
|
|
|
|
|
|
| 240 |
elif 'user' in session:
|
| 241 |
user_info = session.get('user', {})
|
| 242 |
username = user_info.get('preferred_username') or user_info.get('name') or user_info.get('username')
|
| 243 |
if username:
|
| 244 |
logger.info(f"从 session['user'] 获取用户名: {username}")
|
| 245 |
-
|
| 246 |
-
|
| 247 |
-
logger.info(f"Session keys: {list(session.keys())}")
|
| 248 |
-
logger.info(f"Session content: {session}")
|
| 249 |
-
|
| 250 |
-
# 方法2: 直接从 request.username 获取(Gradio 可能已经解析)
|
| 251 |
-
if not username and hasattr(request, 'username') and request.username:
|
| 252 |
-
username = request.username
|
| 253 |
-
logger.info(f"从 request.username 获取用户名: {username}")
|
| 254 |
-
|
| 255 |
-
# 方法3: 从 Starlette Request 的 state 中获取
|
| 256 |
-
if not username and hasattr(request, 'request') and hasattr(request.request, 'state'):
|
| 257 |
-
state = request.request.state
|
| 258 |
-
if hasattr(state, 'user'):
|
| 259 |
-
user_info = state.user
|
| 260 |
-
if isinstance(user_info, dict):
|
| 261 |
-
username = user_info.get('preferred_username') or user_info.get('name')
|
| 262 |
-
else:
|
| 263 |
-
username = str(user_info)
|
| 264 |
-
if username:
|
| 265 |
-
logger.info(f"从 request.request.state.user 获取用户名: {username}")
|
| 266 |
-
|
| 267 |
-
# 方法4: 从 cookies 中获取
|
| 268 |
-
if not username and hasattr(request, 'request') and hasattr(request.request, 'cookies'):
|
| 269 |
-
cookies = request.request.cookies
|
| 270 |
-
for cookie_name in ['hf_user', 'username', 'user', 'hf_username', 'oauth_profile']:
|
| 271 |
-
if cookie_name in cookies:
|
| 272 |
-
username = cookies[cookie_name]
|
| 273 |
-
logger.info(f"从 cookie {cookie_name} 获取用户名: {username}")
|
| 274 |
-
break
|
| 275 |
-
|
| 276 |
-
# 方法5: 从 headers 中获取
|
| 277 |
-
if not username and hasattr(request, 'request') and hasattr(request.request, 'headers'):
|
| 278 |
-
headers = request.request.headers
|
| 279 |
-
for header_name in ['x-user', 'x-hf-user', 'x-username']:
|
| 280 |
-
if header_name in headers:
|
| 281 |
-
username = headers[header_name]
|
| 282 |
-
logger.info(f"从 header {header_name} 获取用户名: {username}")
|
| 283 |
-
break
|
| 284 |
-
|
| 285 |
-
# 调试:打印 request 对象的所有属性
|
| 286 |
if not username:
|
| 287 |
-
logger.warning("
|
| 288 |
-
|
| 289 |
-
|
| 290 |
-
|
| 291 |
-
|
| 292 |
-
# 打印 session
|
| 293 |
-
if hasattr(starlette_request, 'session'):
|
| 294 |
-
logger.warning(f"Session keys: {list(starlette_request.session.keys())}")
|
| 295 |
-
logger.warning(f"Session: {dict(starlette_request.session)}")
|
| 296 |
-
|
| 297 |
-
# 打印 state
|
| 298 |
-
if hasattr(starlette_request, 'state'):
|
| 299 |
-
logger.warning(f"State: {starlette_request.state.__dict__}")
|
| 300 |
-
|
| 301 |
-
# 打印 cookies
|
| 302 |
-
if hasattr(starlette_request, 'cookies'):
|
| 303 |
-
logger.warning(f"Cookies: {dict(starlette_request.cookies)}")
|
| 304 |
-
|
| 305 |
-
# 打印 headers
|
| 306 |
-
if hasattr(starlette_request, 'headers'):
|
| 307 |
-
logger.warning(f"Headers: {dict(starlette_request.headers)}")
|
| 308 |
|
| 309 |
if not username:
|
| 310 |
return "", False
|
|
|
|
| 225 |
return "", False
|
| 226 |
|
| 227 |
# 获取登录用户名
|
| 228 |
+
# 在 Hugging Face Space 中,OAuth 登录后用户信息存储在 Starlette Request 的 session 中
|
| 229 |
username = None
|
| 230 |
|
| 231 |
+
# 从 Starlette Request 的 session 中获取 OAuth 用户信息
|
| 232 |
if hasattr(request, 'request') and hasattr(request.request, 'session'):
|
| 233 |
session = request.request.session
|
| 234 |
+
|
| 235 |
+
# OAuth 用户信息在 session['oauth_info'] 中
|
| 236 |
if 'oauth_info' in session:
|
| 237 |
oauth_info = session.get('oauth_info', {})
|
| 238 |
username = oauth_info.get('preferred_username') or oauth_info.get('name') or oauth_info.get('sub')
|
| 239 |
if username:
|
| 240 |
logger.info(f"从 session['oauth_info'] 获取用户名: {username}")
|
| 241 |
+
|
| 242 |
+
# 或者在 session['user'] 中
|
| 243 |
elif 'user' in session:
|
| 244 |
user_info = session.get('user', {})
|
| 245 |
username = user_info.get('preferred_username') or user_info.get('name') or user_info.get('username')
|
| 246 |
if username:
|
| 247 |
logger.info(f"从 session['user'] 获取用户名: {username}")
|
| 248 |
+
|
| 249 |
+
# 如果 session 中没有用户信息,打印调试信息
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 250 |
if not username:
|
| 251 |
+
logger.warning("无法获取用户名,请确保:")
|
| 252 |
+
logger.warning("1. 已在 Space Settings 中启用 OAuth (hf_oauth: true)")
|
| 253 |
+
logger.warning("2. 用户已通过 'Login with Hugging Face' 按钮登录")
|
| 254 |
+
if hasattr(request, 'request') and hasattr(request.request, 'session'):
|
| 255 |
+
logger.warning(f"Session keys: {list(request.request.session.keys())}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 256 |
|
| 257 |
if not username:
|
| 258 |
return "", False
|