diff --git a/src/navigation/Router.tsx b/src/navigation/Router.tsx index 666f487..698a9ac 100644 --- a/src/navigation/Router.tsx +++ b/src/navigation/Router.tsx @@ -9,7 +9,6 @@ import { getWhitelabel } from "services/whiteLabel"; import Ventilation from "pages/VentEditor"; import { useGlobalState } from "providers"; import DeviceSupport from "pages/DeviceSupport"; -import Login from "pages/Login"; const DeviceHistory = lazy(() => import("pages/DeviceHistory")); const DevicePage = lazy(() => import("pages/Device")); @@ -54,7 +53,7 @@ export const appendToUrl = (appendage: number | string) => { export default function Router() { - const { isAuthenticated, loginWithRedirect, isLoading } = useAuth0(); + const { isLoading } = useAuth0(); const whiteLabel = getWhitelabel(); const [{ user }] = useGlobalState(); @@ -303,7 +302,6 @@ export default function Router() { {/* Redirects */} } /> - } /> {/* } /> */} {/* } /> */} } /> diff --git a/src/pages/Login.tsx b/src/pages/Login.tsx deleted file mode 100644 index 0e5304a..0000000 --- a/src/pages/Login.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import { RedirectLoginOptions, useAuth0 } from "@auth0/auth0-react"; -// import { useAuth } from "hooks"; -import queryString from "query-string"; -import { useCallback, useEffect } from "react"; -import { useLocation } from "react-router"; -// import Loading from "./Loading"; -import LoadingScreen from "app/LoadingScreen"; - -interface Props { - prevPath?: string; -} - -export default function Login(props: Props) { - const { prevPath } = props; - const location = useLocation(); - const { loginWithRedirect } = useAuth0(); - - const setRouteBeforeLogin = useCallback((): Promise => { - return new Promise(function(resolve) { - localStorage.setItem("routeBeforeLogin", prevPath ? prevPath : "/"); - return resolve("success"); - }); - }, [prevPath]); - - useEffect(() => { - const options: RedirectLoginOptions = { - authorizationParams: {} // Initialize here - }; - console.log(location) - if (location && location.search) { - let parsed = queryString.parse(location.search); - - console.log(parsed.signup) - if (parsed.signup === "true") { - // if (options.authorizationParams) options.authorizationParams.screen_hint = "signup"; // 'signup' tells Auth0 to show the signup tab - options.authorizationParams!.screen_hint = "signup"; // 'signup' tells Auth0 to show the signup tab - console.log(options) - } - - if (parsed.email && parsed.email !== "") { - // if (options.authorizationParams) options.authorizationParams.login_hint = parsed.email.toString(); // prefill email - options.authorizationParams!.login_hint = parsed.email.toString(); // prefill email - } - } - - setRouteBeforeLogin().finally(() => { - loginWithRedirect(options); - }); - }, [location, loginWithRedirect, setRouteBeforeLogin]); - - // return ; - return ; -} diff --git a/src/providers/auth.tsx b/src/providers/auth.tsx index e66829a..c5ad0f7 100644 --- a/src/providers/auth.tsx +++ b/src/providers/auth.tsx @@ -1,31 +1,89 @@ -import { useAuth0 } from "@auth0/auth0-react"; -import { PropsWithChildren, useEffect } from "react"; +import { RedirectLoginOptions, useAuth0 } from "@auth0/auth0-react"; +import queryString from "query-string"; +import { PropsWithChildren, useCallback, useEffect } from "react"; +import { useLocation } from "react-router-dom"; interface Props extends PropsWithChildren{ setToken: React.Dispatch> + prevPath?: string } export default function AuthWrapper(props: Props) { - const { children, setToken } = props; - const { isLoading, loginWithRedirect, isAuthenticated, getAccessTokenSilently } = useAuth0(); - - useEffect(() => { - if (!isAuthenticated && !isLoading) { - loginWithRedirect(); - } - }, [isAuthenticated, loginWithRedirect, isLoading]); + const { children, setToken, prevPath } = props; + const { isLoading, loginWithRedirect, isAuthenticated, getAccessTokenSilently } = useAuth0(); - useEffect(() => { - if (isAuthenticated) getAccessTokenSilently().then(t => { - if (t.length < 1) { - loginWithRedirect() - } - setToken(t) - }).catch(() => { - // No token, go back to login - loginWithRedirect() - }) - }, [setToken, isAuthenticated]) - return children; + useEffect(() => { + const url = new URL(window.location.href); + + const isManualLoginPage = url.pathname === "/login"; + + if (isManualLoginPage) { + const options: RedirectLoginOptions = { + authorizationParams: {} // Initialize here + }; + + let parsed = queryString.parse(url.search); + if (parsed.signup === "true") { + options.authorizationParams!.screen_hint = "signup"; + } + + if (parsed.email && parsed.email !== "") { + options.authorizationParams!.login_hint = parsed.email.toString(); // prefill email + } + + loginWithRedirect(options) + + } else if (!isAuthenticated && !isLoading) { + loginWithRedirect(); + } + }, [isAuthenticated, loginWithRedirect, isLoading]); + + useEffect(() => { + if (isAuthenticated) getAccessTokenSilently().then(t => { + if (t.length < 1) { + loginWithRedirect() + } + console.log("setting token :)") + setToken(t) + }).catch(() => { + // No token, go back to login + loginWithRedirect() + }) + }, [setToken, isAuthenticated]) + + // const setRouteBeforeLogin = useCallback((): Promise => { + // return new Promise(function(resolve) { + // localStorage.setItem("routeBeforeLogin", prevPath ? prevPath : "/"); + // return resolve("success"); + // }); + // }, [prevPath]); + + useEffect(() => { + const options: RedirectLoginOptions = { + authorizationParams: {} // Initialize here + }; + console.log(location) + if (location && location.search) { + let parsed = queryString.parse(location.search); + + console.log(parsed.signup) + if (parsed.signup === "true") { + // if (options.authorizationParams) options.authorizationParams.screen_hint = "signup"; // 'signup' tells Auth0 to show the signup tab + options.authorizationParams!.screen_hint = "signup"; // 'signup' tells Auth0 to show the signup tab + console.log(options) + } + + if (parsed.email && parsed.email !== "") { + // if (options.authorizationParams) options.authorizationParams.login_hint = parsed.email.toString(); // prefill email + options.authorizationParams!.login_hint = parsed.email.toString(); // prefill email + } + } + + // setRouteBeforeLogin().finally(() => { + // loginWithRedirect(options); + // }); + }, [location, loginWithRedirect, /*setRouteBeforeLogin*/]); + + return children; } \ No newline at end of file