浏览代码

feat: refactor signout functionality to use aiohttp for OpenID configuration retrieval

Zaiban Ali 5 月之前
父节点
当前提交
899424b371
共有 1 个文件被更改,包括 19 次插入18 次删除
  1. 19 18
      backend/open_webui/apps/webui/routers/auths.py

+ 19 - 18
backend/open_webui/apps/webui/routers/auths.py

@@ -3,7 +3,7 @@ import uuid
 import time
 import datetime
 import logging
-import httpx
+from aiohttp import ClientSession
 
 from open_webui.apps.webui.models.auths import (
     AddUserForm,
@@ -507,24 +507,25 @@ async def signout(request: Request, response: Response):
     response.delete_cookie("token")
 
     if ENABLE_OAUTH_SIGNUP.value:
-        id_token = request.cookies.get("id_token", None)
+        id_token = request.cookies.get("id_token")
         if id_token:
-            async with httpx.AsyncClient() as client:
-                try:
-                    openid_config = await client.get(OPENID_PROVIDER_URL.value)
-                    openid_config.raise_for_status()
-                    openid_data = openid_config.json()
-                    end_session_endpoint = openid_data.get("end_session_endpoint")
-                    if end_session_endpoint:
-                        logout_url = f"{end_session_endpoint}?id_token_hint={id_token}"
-                        response.delete_cookie("id_token")
-                        return RedirectResponse(url=logout_url)
-                except httpx.HTTPStatusError as e:
-                    raise HTTPException(status_code=e.response.status_code, detail="Failed to fetch OpenID configuration")
-                except Exception as e:
-                    raise HTTPException(status_code=500, detail=str(e))
-
-    # Fall back to the default signout
+            try:
+                async with ClientSession() as session:
+                    async with session.get(OPENID_PROVIDER_URL.value) as resp:
+                        if resp.status == 200:
+                            openid_data = await resp.json()
+                            logout_url = openid_data.get("end_session_endpoint")
+                            if logout_url:
+                                response.delete_cookie("id_token")
+                                return RedirectResponse(url=f"{logout_url}?id_token_hint={id_token}")
+                        else:
+                            raise HTTPException(
+                                status_code=resp.status,
+                                detail="Failed to fetch OpenID configuration"
+                            )
+            except Exception as e:
+                raise HTTPException(status_code=500, detail=str(e))
+
     return {"status": True}