diff --git a/frontend/src/pages/authorize-page.tsx b/frontend/src/pages/authorize-page.tsx index 562061b4..261a7da3 100644 --- a/frontend/src/pages/authorize-page.tsx +++ b/frontend/src/pages/authorize-page.tsx @@ -102,6 +102,7 @@ export const AuthorizePage = () => { return ""; })(); const [autoAuthorize, setAutoAuthorize] = useState(false); + const [skipConsentChecked, setSkipConsentChecked] = useState(false); const { mutate: authorizeMutate, isPending: authorizePending } = useMutation({ mutationFn: () => { @@ -124,21 +125,34 @@ export const AuthorizePage = () => { }); useEffect(() => { + let active = true; + const controller = new AbortController(); + const checkSkipConsent = async () => { try { const res = await fetch( - `/api/oidc/skip-consent?oidc_ticket=${encodeURIComponent(screenParams.oidc_ticket ?? "")}`, + `/api/oidc/skip-consent?oidc_ticket=${encodeURIComponent( screenParams.oidc_ticket ?? "")}`, + { signal: controller.signal }, ); if (!res.ok) return; const parsed = skipConsentResponseSchema.safeParse(await res.json()); - if (!parsed.success || !parsed.data.skipConsent) return; + if (!active || !parsed.success || !parsed.data.skipConsent) return; setAutoAuthorize(true); authorizeMutate(); - } catch {} + } catch { + // Fall back to manual consent on any failure (including abort). + } finally { + if (active) setSkipConsentChecked(true); + } }; checkSkipConsent(); - }, []); + + return () => { + active = false; + controller.abort(); + }; + }, [authorizeMutate, screenParams.oidc_ticket]); if (!isOidc || !screenParams.oidc_ticket || !screenParams.oidc_scope) { return ( @@ -199,7 +213,7 @@ export const AuthorizePage = () => { diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index cc5214a3..214baada 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -9,7 +9,7 @@ export default defineConfig({ plugins: [react(), tailwindcss(), visualizer()], resolve: { alias: { - "@": path.resolve(__dirname, "./src"), + "@": path.resolve(import.meta.dirname, "./src"), }, }, build: { diff --git a/internal/controller/oidc_controller.go b/internal/controller/oidc_controller.go index 0f13709c..99fd78f2 100644 --- a/internal/controller/oidc_controller.go +++ b/internal/controller/oidc_controller.go @@ -266,6 +266,9 @@ func (controller *OIDCController) authorize(c *gin.Context) { } func (controller *OIDCController) skipConsent(c *gin.Context) { + c.Header("cache-control", "no-store") + c.Header("pragma", "no-cache") + if controller.oidc == nil { c.JSON(500, SimpleResponse{ Status: 500,