浏览代码

refac/fix: signout redirect flow

Timothy Jaeryang Baek 4 月之前
父节点
当前提交
7df6d7f325

+ 17 - 6
backend/open_webui/routers/auths.py

@@ -31,7 +31,7 @@ from open_webui.env import (
     SRC_LOG_LEVELS,
     SRC_LOG_LEVELS,
 )
 )
 from fastapi import APIRouter, Depends, HTTPException, Request, status
 from fastapi import APIRouter, Depends, HTTPException, Request, status
-from fastapi.responses import RedirectResponse, Response
+from fastapi.responses import RedirectResponse, Response, JSONResponse
 from open_webui.config import OPENID_PROVIDER_URL, ENABLE_OAUTH_SIGNUP, ENABLE_LDAP
 from open_webui.config import OPENID_PROVIDER_URL, ENABLE_OAUTH_SIGNUP, ENABLE_LDAP
 from pydantic import BaseModel
 from pydantic import BaseModel
 
 
@@ -577,9 +577,14 @@ async def signout(request: Request, response: Response):
                             logout_url = openid_data.get("end_session_endpoint")
                             logout_url = openid_data.get("end_session_endpoint")
                             if logout_url:
                             if logout_url:
                                 response.delete_cookie("oauth_id_token")
                                 response.delete_cookie("oauth_id_token")
-                                return RedirectResponse(
+
+                                return JSONResponse(
+                                    status_code=200,
+                                    content={
+                                        "status": True,
+                                        "redirect_url": f"{logout_url}?id_token_hint={oauth_id_token}",
+                                    },
                                     headers=response.headers,
                                     headers=response.headers,
-                                    url=f"{logout_url}?id_token_hint={oauth_id_token}",
                                 )
                                 )
                         else:
                         else:
                             raise HTTPException(
                             raise HTTPException(
@@ -594,12 +599,18 @@ async def signout(request: Request, response: Response):
                 )
                 )
 
 
     if WEBUI_AUTH_SIGNOUT_REDIRECT_URL:
     if WEBUI_AUTH_SIGNOUT_REDIRECT_URL:
-        return RedirectResponse(
+        return JSONResponse(
+            status_code=200,
+            content={
+                "status": True,
+                "redirect_url": WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
+            },
             headers=response.headers,
             headers=response.headers,
-            url=WEBUI_AUTH_SIGNOUT_REDIRECT_URL,
         )
         )
 
 
-    return {"status": True}
+    return JSONResponse(
+        status_code=200, content={"status": True}, headers=response.headers
+    )
 
 
 
 
 ############################
 ############################

+ 1 - 0
src/lib/apis/auths/index.ts

@@ -347,6 +347,7 @@ export const userSignOut = async () => {
 	if (error) {
 	if (error) {
 		throw error;
 		throw error;
 	}
 	}
+	return res;
 };
 };
 
 
 export const addUser = async (
 export const addUser = async (

+ 2 - 3
src/lib/components/layout/Sidebar/UserMenu.svelte

@@ -156,12 +156,11 @@
 			<button
 			<button
 				class="flex rounded-md py-2 px-3 w-full hover:bg-gray-50 dark:hover:bg-gray-800 transition"
 				class="flex rounded-md py-2 px-3 w-full hover:bg-gray-50 dark:hover:bg-gray-800 transition"
 				on:click={async () => {
 				on:click={async () => {
-					await userSignOut();
+					const res = await userSignOut();
 					user.set(null);
 					user.set(null);
-
 					localStorage.removeItem('token');
 					localStorage.removeItem('token');
-					location.href = '/auth';
 
 
+					location.href = res?.redirect_url ?? '/auth';
 					show = false;
 					show = false;
 				}}
 				}}
 			>
 			>

+ 3 - 3
src/routes/+layout.svelte

@@ -464,11 +464,11 @@
 		}
 		}
 
 
 		if (now >= exp) {
 		if (now >= exp) {
-			await userSignOut();
+			const res = await userSignOut();
 			user.set(null);
 			user.set(null);
-
 			localStorage.removeItem('token');
 			localStorage.removeItem('token');
-			location.href = '/auth';
+
+			location.href = res?.redirect_url ?? '/auth';
 		}
 		}
 	};
 	};