testcoder-ui commited on
Commit
763d966
·
1 Parent(s): 004d952

Clean up OAuth: simplify username detection to use session only

Browse files
Files changed (1) hide show
  1. app.py +13 -65
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
- # 方法1: 从 Starlette Request 的 session 中获取(OAuth 信息存在这里)
232
  if hasattr(request, 'request') and hasattr(request.request, 'session'):
233
  session = request.request.session
234
- # OAuth 用户信息可能在 session 的 'oauth_info' 或 'user' 中
 
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
- elif session:
246
- # 打印 session 内容用于调试
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
- if hasattr(request, 'request'):
289
- starlette_request = request.request
290
- logger.warning(f"Starlette Request type: {type(starlette_request)}")
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