diff --git a/app/[locale]/auth/callback/page.tsx b/app/[locale]/auth/callback/page.tsx index ed74078d..b0f52bc9 100644 --- a/app/[locale]/auth/callback/page.tsx +++ b/app/[locale]/auth/callback/page.tsx @@ -53,7 +53,15 @@ function OAuthCallbackInner() { sessionStorage.removeItem("oauth_state"); sessionStorage.removeItem("oauth_code_verifier"); sessionStorage.removeItem("oauth_server_url"); - router.push(`/${params.locale}`); + let redirectTo = `/${params.locale}`; + try { + const saved = sessionStorage.getItem('redirect_after_login'); + if (saved) { + sessionStorage.removeItem('redirect_after_login'); + redirectTo = saved; + } + } catch {} + router.push(redirectTo); } else { setError("token_exchange_failed"); } diff --git a/app/[locale]/calendar/page.tsx b/app/[locale]/calendar/page.tsx index 5e79ef35..d6b81270 100644 --- a/app/[locale]/calendar/page.tsx +++ b/app/[locale]/calendar/page.tsx @@ -77,6 +77,7 @@ export default function CalendarPage() { useEffect(() => { if (!isAuthenticated) { + try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {} router.push("/login"); } else if (!supportsCalendar) { router.push("/"); diff --git a/app/[locale]/contacts/page.tsx b/app/[locale]/contacts/page.tsx index 4a8b33fd..f5c41ea3 100644 --- a/app/[locale]/contacts/page.tsx +++ b/app/[locale]/contacts/page.tsx @@ -79,6 +79,7 @@ export default function ContactsPage() { useEffect(() => { if (!isAuthenticated) { + try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {} router.push("/login"); } }, [isAuthenticated, router]); diff --git a/app/[locale]/login/page.tsx b/app/[locale]/login/page.tsx index 7e5215f6..4d4a36c0 100644 --- a/app/[locale]/login/page.tsx +++ b/app/[locale]/login/page.tsx @@ -93,7 +93,15 @@ export default function LoginPage() { useEffect(() => { if (isAuthenticated) { - router.push('/'); + let redirectTo = '/'; + try { + const saved = sessionStorage.getItem('redirect_after_login'); + if (saved) { + sessionStorage.removeItem('redirect_after_login'); + redirectTo = saved; + } + } catch {} + router.push(redirectTo); } }, [isAuthenticated, router]); @@ -299,14 +307,30 @@ export default function LoginPage() { if (success) { saveUsername(formData.username); - router.push('/'); + let redirectTo = '/'; + try { + const saved = sessionStorage.getItem('redirect_after_login'); + if (saved) { + sessionStorage.removeItem('redirect_after_login'); + redirectTo = saved; + } + } catch {} + router.push(redirectTo); } }; const handleDevLogin = async () => { const success = await login(serverUrl, "dev@localhost", "dev"); if (success) { - router.push('/'); + let redirectTo = '/'; + try { + const saved = sessionStorage.getItem('redirect_after_login'); + if (saved) { + sessionStorage.removeItem('redirect_after_login'); + redirectTo = saved; + } + } catch {} + router.push(redirectTo); } }; diff --git a/app/[locale]/page.tsx b/app/[locale]/page.tsx index 4803a7ff..5e79537b 100644 --- a/app/[locale]/page.tsx +++ b/app/[locale]/page.tsx @@ -264,6 +264,7 @@ export default function Home() { // Redirect to login if not authenticated useEffect(() => { if (initialCheckDone && !isAuthenticated && !authLoading) { + try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {} router.push('/login'); } }, [initialCheckDone, isAuthenticated, authLoading, router]); diff --git a/app/[locale]/settings/page.tsx b/app/[locale]/settings/page.tsx index c1fd89cc..c4dc8639 100644 --- a/app/[locale]/settings/page.tsx +++ b/app/[locale]/settings/page.tsx @@ -35,6 +35,7 @@ export default function SettingsPage() { useEffect(() => { if (!isAuthenticated) { + try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {} router.push('/login'); } }, [isAuthenticated, router]);