77 lines
2.2 KiB
JavaScript
77 lines
2.2 KiB
JavaScript
import { useState, useEffect } from 'react'
|
|
import { createContext } from 'react'
|
|
import reactLogo from './assets/react.svg'
|
|
import viteLogo from '/vite.svg'
|
|
import './App.css'
|
|
|
|
import { API_BASE } from './config.js'
|
|
|
|
import Login from './components/login.jsx'
|
|
import MainApp from './components/MainApp.jsx'
|
|
|
|
export const ClientContext = createContext(null);
|
|
|
|
export function userContext() {}
|
|
|
|
export default function App() {
|
|
const [loading, setLoading] = useState(true); // true while checking auth
|
|
const [loggedIn, setLoggedIn] = useState(false);
|
|
const [clientId, setClientId] = useState([]);
|
|
|
|
useEffect(() => {
|
|
async function checkAuth() {
|
|
try {
|
|
// This endpoint should validate the refresh token cookie and return an access token
|
|
|
|
const res = await fetch(`${API_BASE}/auth/login_refresh_token`, {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
"User-Agent": "react-app",
|
|
},
|
|
credentials: "include", // send cookies automatically
|
|
body: JSON.stringify({
|
|
device_id : "147ac10b-58cc-4372-a567-0e02b2c3d479", // or persistent device ID
|
|
}),
|
|
});
|
|
|
|
console.log("sent checkAuth request")
|
|
|
|
if (!res.ok) {
|
|
console.log(res)
|
|
console.log("checkAuth request not ok")
|
|
// No valid refresh token → user must log in
|
|
setLoggedIn(false);
|
|
} else {
|
|
// Got short-lived access token
|
|
console.log("Got short-lived access token")
|
|
const data = await res.json();
|
|
console.log(data)
|
|
localStorage.setItem("access_tokens", JSON.stringify(data.tokens)); // store for API calls
|
|
setClientId(data.user_id)
|
|
|
|
setLoggedIn(true);
|
|
}
|
|
} catch (err) {
|
|
console.error("Auth check failed:", err);
|
|
setLoggedIn(false);
|
|
} finally {
|
|
setLoading(false);
|
|
}
|
|
}
|
|
|
|
checkAuth();
|
|
}, []);
|
|
|
|
if (loading) return <p>Loading...</p>; // can show a spinner
|
|
|
|
// Show main app if logged in, otherwise show login
|
|
return loggedIn ? (
|
|
<MainApp resClientId ={clientId} />
|
|
) : (
|
|
<Login onLogin={() => setLoggedIn(true)} />
|
|
);
|
|
}
|
|
|
|
//export default App
|