// OAuthCallbackView - Handles OAuth callback with token extraction function OAuthCallbackView() { const { login } = useAuth(); const [error, setError] = React.useState(''); React.useEffect(() => { const handleCallback = async () => { // Get URL parameters from hash (after #/auth/callback?) const hash = window.location.hash; const queryStart = hash.indexOf('?'); const queryString = queryStart >= 0 ? hash.substring(queryStart + 1) : ''; const urlParams = new URLSearchParams(queryString); const accessToken = urlParams.get('access_token'); const refreshToken = urlParams.get('refresh_token'); const errorParam = urlParams.get('error'); if (errorParam) { setError(errorParam); // Redirect to login after showing error setTimeout(() => { window.location.hash = '#/login'; }, 3000); return; } if (accessToken && refreshToken) { // Store tokens and fetch user data try { localStorage.setItem('rosa_access_token', accessToken); localStorage.setItem('rosa_refresh_token', refreshToken); // Fetch user data const response = await fetch('/api/auth/me', { headers: { 'Authorization': `Bearer ${accessToken}` } }); if (response.ok) { const userData = await response.json(); localStorage.setItem('rosa_user', JSON.stringify(userData)); // Redirect to welcome page window.location.hash = '#/welcome'; window.location.reload(); } else { setError('Impossibile recuperare i dati utente'); setTimeout(() => { window.location.hash = '#/login'; }, 3000); } } catch (err) { console.error('OAuth callback error:', err); setError('Errore durante l\'autenticazione'); setTimeout(() => { window.location.hash = '#/login'; }, 3000); } } else { setError('Token mancanti nella risposta OAuth'); setTimeout(() => { window.location.hash = '#/login'; }, 3000); } }; handleCallback(); }, []); return (
{error}
Reindirizzamento alla pagina di login...
> ) : ( <>Attendere prego
> )}