@mikestraczek/cms-auth
Version:
Authentication and user management for the CMS template
67 lines • 1.95 kB
JavaScript
// 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