feat: implement redirect after login functionality across multiple pages
This commit is contained in:
@@ -53,7 +53,15 @@ function OAuthCallbackInner() {
|
|||||||
sessionStorage.removeItem("oauth_state");
|
sessionStorage.removeItem("oauth_state");
|
||||||
sessionStorage.removeItem("oauth_code_verifier");
|
sessionStorage.removeItem("oauth_code_verifier");
|
||||||
sessionStorage.removeItem("oauth_server_url");
|
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 {
|
} else {
|
||||||
setError("token_exchange_failed");
|
setError("token_exchange_failed");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ export default function CalendarPage() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isAuthenticated) {
|
if (!isAuthenticated) {
|
||||||
|
try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {}
|
||||||
router.push("/login");
|
router.push("/login");
|
||||||
} else if (!supportsCalendar) {
|
} else if (!supportsCalendar) {
|
||||||
router.push("/");
|
router.push("/");
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ export default function ContactsPage() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isAuthenticated) {
|
if (!isAuthenticated) {
|
||||||
|
try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {}
|
||||||
router.push("/login");
|
router.push("/login");
|
||||||
}
|
}
|
||||||
}, [isAuthenticated, router]);
|
}, [isAuthenticated, router]);
|
||||||
|
|||||||
@@ -93,7 +93,15 @@ export default function LoginPage() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (isAuthenticated) {
|
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]);
|
}, [isAuthenticated, router]);
|
||||||
|
|
||||||
@@ -299,14 +307,30 @@ export default function LoginPage() {
|
|||||||
|
|
||||||
if (success) {
|
if (success) {
|
||||||
saveUsername(formData.username);
|
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 handleDevLogin = async () => {
|
||||||
const success = await login(serverUrl, "dev@localhost", "dev");
|
const success = await login(serverUrl, "dev@localhost", "dev");
|
||||||
if (success) {
|
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);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ export default function Home() {
|
|||||||
// Redirect to login if not authenticated
|
// Redirect to login if not authenticated
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (initialCheckDone && !isAuthenticated && !authLoading) {
|
if (initialCheckDone && !isAuthenticated && !authLoading) {
|
||||||
|
try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {}
|
||||||
router.push('/login');
|
router.push('/login');
|
||||||
}
|
}
|
||||||
}, [initialCheckDone, isAuthenticated, authLoading, router]);
|
}, [initialCheckDone, isAuthenticated, authLoading, router]);
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ export default function SettingsPage() {
|
|||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!isAuthenticated) {
|
if (!isAuthenticated) {
|
||||||
|
try { sessionStorage.setItem('redirect_after_login', window.location.pathname); } catch {}
|
||||||
router.push('/login');
|
router.push('/login');
|
||||||
}
|
}
|
||||||
}, [isAuthenticated, router]);
|
}, [isAuthenticated, router]);
|
||||||
|
|||||||
Reference in New Issue
Block a user