feat: implement redirect after login functionality across multiple pages

This commit is contained in:
Linus Rath
2026-03-11 23:35:00 +01:00
parent a88b4e4407
commit f996ab77b8
6 changed files with 40 additions and 4 deletions
+9 -1
View File
@@ -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");
}
+1
View File
@@ -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("/");
+1
View File
@@ -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]);
+27 -3
View File
@@ -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);
}
};
+1
View File
@@ -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]);
+1
View File
@@ -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]);