From 5c4c7ad3214d42b129012056b71eae8749f3dd51 Mon Sep 17 00:00:00 2001
From: hsiegeln <37154749+hsiegeln@users.noreply.github.com>
Date: Mon, 6 Apr 2026 01:14:34 +0200
Subject: [PATCH] fix: include BASE_PATH in OIDC redirect_uri for subpath
deployments
Behind a reverse proxy with strip-prefix (e.g., Traefik at /server/),
the OIDC redirect_uri must include the prefix so the callback routes
back through the proxy. Now uses config.basePath (from )
instead of hardcoding '/'.
Co-Authored-By: Claude Opus 4.6 (1M context)
---
ui/src/auth/LoginPage.tsx | 3 ++-
ui/src/auth/OidcCallback.tsx | 3 ++-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/ui/src/auth/LoginPage.tsx b/ui/src/auth/LoginPage.tsx
index 8204e148..f00b5dd4 100644
--- a/ui/src/auth/LoginPage.tsx
+++ b/ui/src/auth/LoginPage.tsx
@@ -2,6 +2,7 @@ import { type FormEvent, useEffect, useMemo, useState } from 'react';
import { Navigate } from 'react-router';
import { useAuthStore } from './auth-store';
import { api } from '../api/client';
+import { config } from '../config';
import { Card, Input, Button, Alert, FormField } from '@cameleer/design-system';
import styles from './LoginPage.module.css';
@@ -69,7 +70,7 @@ export function LoginPage() {
const handleOidcLogin = () => {
if (!oidc) return;
setOidcLoading(true);
- const redirectUri = `${window.location.origin}/oidc/callback`;
+ const redirectUri = `${window.location.origin}${config.basePath}oidc/callback`;
const params = new URLSearchParams({
response_type: 'code',
client_id: oidc.clientId,
diff --git a/ui/src/auth/OidcCallback.tsx b/ui/src/auth/OidcCallback.tsx
index 8140a2aa..d98d146d 100644
--- a/ui/src/auth/OidcCallback.tsx
+++ b/ui/src/auth/OidcCallback.tsx
@@ -2,6 +2,7 @@ import { useEffect, useRef } from 'react';
import { Navigate, useNavigate } from 'react-router';
import { useAuthStore } from './auth-store';
import { Card, Spinner, Alert, Button } from '@cameleer/design-system';
+import { config } from '../config';
export function OidcCallback() {
const { isAuthenticated, loading, error, loginWithOidcCode } = useAuthStore();
@@ -29,7 +30,7 @@ export function OidcCallback() {
return;
}
- const redirectUri = `${window.location.origin}/oidc/callback`;
+ const redirectUri = `${window.location.origin}${config.basePath}oidc/callback`;
loginWithOidcCode(code, redirectUri);
}, [loginWithOidcCode]);