UNPKG

@mikestraczek/cms-auth

Version:

Authentication and user management for the CMS template

67 lines 1.95 kB
// src/context/auth.tsx import { useSession } from "next-auth/react"; import { createContext, useContext, useEffect, useState } from "react"; import { jsx } from "react/jsx-runtime"; var AuthContext = createContext({ user: null, isSignedIn: false, isLoading: true, isAdmin: false }); var useAuth = () => useContext(AuthContext); function isExtendedUser(user) { if (user === null || typeof user !== "object") { return false; } const userObj = user; return typeof userObj.id === "string" && typeof userObj.role === "string"; } function AuthProvider({ children }) { const { data: session, status } = useSession(); const [user, setUser] = useState(null); const [isSignedIn, setIsSignedIn] = useState(false); const [isLoading, setIsLoading] = useState(true); const [isAdmin, setIsAdmin] = useState(false); useEffect(() => { const isAuthenticated = status === "authenticated"; const isStillLoading = status === "loading"; setIsSignedIn(isAuthenticated); setIsLoading(isStillLoading); if (isAuthenticated && session?.user && isExtendedUser(session.user)) { const userData = session.user; const userObject = { id: userData.id, name: userData.name ?? "", email: userData.email ?? "", role: userData.role, createdAt: /* @__PURE__ */ new Date(), updatedAt: /* @__PURE__ */ new Date() }; setUser(userObject); setIsAdmin( userData.role === "ADMIN" /* ADMIN */ || userData.role === "SUPERADMIN" /* SUPERADMIN */ ); } else if (status === "unauthenticated") { setUser(null); setIsSignedIn(false); setIsAdmin(false); } }, [session, status]); return /* @__PURE__ */ jsx( AuthContext.Provider, { value: { user, isSignedIn, isLoading, isAdmin }, children } ); } export { AuthProvider, useAuth }; //# sourceMappingURL=client.mjs.map