Skip to content

Commit 257dc89

Browse files
committed
feat: Added support for redis as session storage
1 parent c0a4716 commit 257dc89

File tree

3 files changed

+43
-8
lines changed

3 files changed

+43
-8
lines changed

backend/open_webui/main.py

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@
5050
from starlette.responses import Response, StreamingResponse
5151
from starlette.datastructures import Headers
5252

53+
from starsessions import (
54+
SessionMiddleware as StarSessionsMiddleware,
55+
SessionAutoloadMiddleware,
56+
)
57+
from starsessions.stores.redis import RedisStore
5358

5459
from open_webui.utils import logger
5560
from open_webui.utils.audit import AuditLevel, AuditLoggingMiddleware
@@ -1878,13 +1883,42 @@ async def get_current_usage(user=Depends(get_verified_user)):
18781883

18791884
# SessionMiddleware is used by authlib for oauth
18801885
if len(OAUTH_PROVIDERS) > 0:
1881-
app.add_middleware(
1882-
SessionMiddleware,
1883-
secret_key=WEBUI_SECRET_KEY,
1884-
session_cookie="oui-session",
1885-
same_site=WEBUI_SESSION_COOKIE_SAME_SITE,
1886-
https_only=WEBUI_SESSION_COOKIE_SECURE,
1887-
)
1886+
try:
1887+
# Try to create Redis store for sessions
1888+
if REDIS_URL:
1889+
redis_session_store = RedisStore(
1890+
url=REDIS_URL,
1891+
prefix=(
1892+
f"{REDIS_KEY_PREFIX}:session:" if REDIS_KEY_PREFIX else "session:"
1893+
),
1894+
)
1895+
1896+
# Add SessionAutoloadMiddleware first to handle session loading
1897+
app.add_middleware(SessionAutoloadMiddleware)
1898+
1899+
app.add_middleware(
1900+
StarSessionsMiddleware,
1901+
store=redis_session_store,
1902+
cookie_name="oui-session",
1903+
cookie_same_site=WEBUI_SESSION_COOKIE_SAME_SITE,
1904+
cookie_https_only=WEBUI_SESSION_COOKIE_SECURE,
1905+
)
1906+
log.info("Using StarSessions with Redis for session management")
1907+
else:
1908+
raise ValueError("Redis URL not configured")
1909+
1910+
except Exception as e:
1911+
log.warning(
1912+
f"Failed to initialize Redis sessions, falling back to cookie based sessions: {e}"
1913+
)
1914+
# Fallback to existing SessionMiddleware
1915+
app.add_middleware(
1916+
SessionMiddleware,
1917+
secret_key=WEBUI_SECRET_KEY,
1918+
session_cookie="oui-session",
1919+
same_site=WEBUI_SESSION_COOKIE_SAME_SITE,
1920+
https_only=WEBUI_SESSION_COOKIE_SECURE,
1921+
)
18881922

18891923

18901924
@app.get("/oauth/{provider}/login")

backend/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ aiocache
1515
aiofiles
1616
starlette-compress==1.6.0
1717
httpx[socks,http2,zstd,cli,brotli]==0.28.1
18+
starsessions[redis]==2.2.1
1819

1920
sqlalchemy==2.0.38
2021
alembic==1.14.0

static/pyodide/pyodide-lock.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)