diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 8f1a1b1..022c176 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -32,6 +32,10 @@ export async function authFetch(url: string, options?: RequestInit): Promise { const handleCallback = async () => { const token = searchParams.get('token'); - const redirect = searchParams.get('redirect') || '/'; + const redirect = + searchParams.get('redirect') || + sessionStorage.getItem('oauth_redirect') || + '/'; + sessionStorage.removeItem('oauth_redirect'); if (!token) { setError('No authentication token received'); diff --git a/frontend/src/pages/LoginPage.tsx b/frontend/src/pages/LoginPage.tsx index 80225b8..5bebc9e 100644 --- a/frontend/src/pages/LoginPage.tsx +++ b/frontend/src/pages/LoginPage.tsx @@ -1,5 +1,5 @@ import { useEffect } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useSearchParams } from 'react-router-dom'; import { useAuth } from '../contexts/AuthContext'; import { API_BASE_URL } from '../config'; import DocNestLogo from '../assets/docnest/docnest-icon-128.png'; @@ -9,6 +9,7 @@ import './LoginPage.css'; function LoginPage() { const { user, loading } = useAuth(); const navigate = useNavigate(); + const [searchParams] = useSearchParams(); useEffect(() => { if (!loading && user) { @@ -16,12 +17,20 @@ function LoginPage() { } }, [user, loading, navigate]); + const saveRedirectAndGo = (oauthUrl: string) => { + const redirect = searchParams.get('redirect'); + if (redirect) { + sessionStorage.setItem('oauth_redirect', redirect); + } + window.location.href = oauthUrl; + }; + const handleGoogleLogin = () => { - window.location.href = `${API_BASE_URL}/auth/google`; + saveRedirectAndGo(`${API_BASE_URL}/auth/google`); }; const handleGitHubLogin = () => { - window.location.href = `${API_BASE_URL}/auth/github`; + saveRedirectAndGo(`${API_BASE_URL}/auth/github`); }; if (loading) {