diff --git a/src/util/auth.js b/src/util/auth.js index fe3138b..f25a6bb 100644 --- a/src/util/auth.js +++ b/src/util/auth.js @@ -1,6 +1,8 @@ -import { useState, useContext, useEffect } from "react"; -import { useSearchParams, useNavigate } from "react-router-dom"; -import SettingsContext from "@mcl/settings"; +import { useState, useEffect } from "react"; +import { useSearchParams } from "react-router-dom"; + +const tokenStorageName = "cairoAuthToken"; +const tokenQuery = "cairoAuthToken"; const verifyAuth = (authToken) => fetch("/api/auth/verify", { @@ -10,29 +12,34 @@ const verifyAuth = (authToken) => .catch(() => false); export function useCairoAuth() { - const { state: settings, updateSettings } = useContext(SettingsContext); - const [auth, setAuth] = useState(!!settings.cairoAuth); - const [searchParams] = useSearchParams(); - const nav = useNavigate(); + const [authToken, setAuthToken] = useState( + localStorage.getItem(tokenStorageName), + ); + const [auth, setAuth] = useState(false); + const [searchParams, setSearchParams] = useSearchParams(); useEffect(() => { - const webToken = searchParams.get("cairoAuthToken"); + if (!authToken) return; + verifyAuth(authToken).then((authorized) => { + if (!authorized) localStorage.removeItem(tokenStorageName); + setAuth(authorized); + }); + }, [authToken]); + + useEffect(() => { + const webToken = searchParams.get(tokenQuery); if (!webToken) return; - verifyAuth(webToken).then(setAuth); - updateSettings({ cairoAuth: webToken }); - nav("/"); + localStorage.setItem(tokenStorageName, webToken); + searchParams.delete(tokenQuery); + setAuthToken(webToken); + setSearchParams(searchParams); }, [searchParams]); - useEffect(() => { - verifyAuth(settings.cairoAuth).then(setAuth); - nav("/"); - }, [settings.cairoAuth]); - return auth; } export function getAuthTokenFromStorage() { - return JSON.parse(localStorage.getItem("settings")).cairoAuth; + return localStorage.getItem(tokenStorageName); } export function cairoAuthHeader() {