|
50 | 50 | from starlette.responses import Response, StreamingResponse
|
51 | 51 | from starlette.datastructures import Headers
|
52 | 52 |
|
| 53 | +from starsessions import ( |
| 54 | + SessionMiddleware as StarSessionsMiddleware, |
| 55 | + SessionAutoloadMiddleware, |
| 56 | +) |
| 57 | +from starsessions.stores.redis import RedisStore |
53 | 58 |
|
54 | 59 | from open_webui.utils import logger
|
55 | 60 | from open_webui.utils.audit import AuditLevel, AuditLoggingMiddleware
|
@@ -1878,13 +1883,42 @@ async def get_current_usage(user=Depends(get_verified_user)):
|
1878 | 1883 |
|
1879 | 1884 | # SessionMiddleware is used by authlib for oauth
|
1880 | 1885 | 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 | + ) |
1888 | 1922 |
|
1889 | 1923 |
|
1890 | 1924 | @app.get("/oauth/{provider}/login")
|
|
0 commit comments