mirror of
https://github.com/open-webui/open-webui
synced 2024-12-28 06:42:47 +00:00
feat: enable OAuth signup configuration for signout functionality
This commit is contained in:
parent
9918ec6246
commit
48d604a525
@ -33,6 +33,7 @@ from fastapi import APIRouter, Depends, HTTPException, Request, status
|
||||
from fastapi.responses import RedirectResponse, Response
|
||||
from open_webui.config import (
|
||||
OPENID_PROVIDER_URL,
|
||||
ENABLE_OAUTH_SIGNUP,
|
||||
)
|
||||
from pydantic import BaseModel
|
||||
from open_webui.utils.misc import parse_duration, validate_email_format
|
||||
@ -505,22 +506,23 @@ async def signup(request: Request, response: Response, form_data: SignupForm):
|
||||
async def signout(request: Request, response: Response):
|
||||
response.delete_cookie("token")
|
||||
|
||||
id_token = request.cookies.get("id_token", None)
|
||||
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))
|
||||
if ENABLE_OAUTH_SIGNUP.value:
|
||||
id_token = request.cookies.get("id_token", None)
|
||||
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
|
||||
return {"status": True}
|
||||
|
@ -20,7 +20,6 @@ from open_webui.config import (
|
||||
OAUTH_MERGE_ACCOUNTS_BY_EMAIL,
|
||||
OAUTH_PROVIDERS,
|
||||
ENABLE_OAUTH_ROLE_MANAGEMENT,
|
||||
OAUTH_PROVIDER_NAME,
|
||||
OAUTH_ROLES_CLAIM,
|
||||
OAUTH_EMAIL_CLAIM,
|
||||
OAUTH_PICTURE_CLAIM,
|
||||
@ -254,7 +253,7 @@ class OAuthManager:
|
||||
secure=WEBUI_SESSION_COOKIE_SECURE,
|
||||
)
|
||||
|
||||
if OAUTH_PROVIDER_NAME.value:
|
||||
if ENABLE_OAUTH_SIGNUP.value:
|
||||
id_token = token.get("id_token")
|
||||
response.set_cookie(
|
||||
key="id_token",
|
||||
|
Loading…
Reference in New Issue
Block a user