UNPKG

@topsoft4u/next-auth

Version:

Authentication helper for next.js using SWR

44 lines 2.19 kB
import { useRouter } from "next/router"; import { useCallback, useEffect, useMemo } from "react"; import useSWR from "swr"; export var useUser = function (_a) { var _b = _a.swrKey, swrKey = _b === void 0 ? "auth" : _b, swrFetcher = _a.swrFetcher, isLoggedIn = _a.isLoggedIn, loginUrl = _a.loginUrl, _c = _a.redirectQueryParam, redirectQueryParam = _c === void 0 ? "redirect" : _c, _d = _a.redirectIf, redirectIf = _d === void 0 ? "NEVER" : _d, redirectTo = _a.redirectTo; var _e = useSWR(swrKey, swrFetcher), user = _e.data, setUser = _e.mutate; var _f = useRouter(), asPath = _f.asPath, query = _f.query, push = _f.push, isReady = _f.isReady; var isLoading = useMemo(function () { return user === undefined; }, [user]); var isLoggedInMemo = useMemo(function () { return isLoggedIn(user); }, [isLoggedIn, user]); // region Redirects var redirectNeeded = useMemo(function () { // Not ready yet if (!isReady || isLoading) return false; // Redirect not needed return redirectIf !== "NEVER"; }, [isLoading, isReady, redirectIf]); var redirectGuest = useCallback(function () { var _a; if (isLoggedInMemo || redirectIf !== "GUEST") return; push({ pathname: loginUrl, query: (_a = {}, _a[redirectQueryParam] = asPath, _a) }).then(); }, [asPath, isLoggedInMemo, loginUrl, push, redirectIf, redirectQueryParam]); var redirectUser = useCallback(function () { var _a; if (!isLoggedInMemo || redirectIf !== "USER") return; push(((_a = query === null || query === void 0 ? void 0 : query[redirectQueryParam]) === null || _a === void 0 ? void 0 : _a.toString()) || redirectTo || "/").then(); }, [isLoggedInMemo, push, query, redirectIf, redirectQueryParam, redirectTo]); useEffect(function () { if (!redirectNeeded) return; redirectGuest(); redirectUser(); }, [redirectGuest, redirectNeeded, redirectUser]); // endregion return { user: user, isLoggedIn: isLoggedInMemo, setUser: setUser }; }; //# sourceMappingURL=useUser.js.map