114
loading...
This website collects cookies to deliver better user experience
npx create-next-app [your_project_name] -e https://github.com/bhagatpratik07/next-js-auth-blog/tree/blog
npm install netlify-identity-widget
import { createContext} from "react";
export const AuthContext = createContext({
user: null,
login: () => {},
logout: () => {},
authReady: false,
});
const AuthContextProvider = ({ children }) => {
return <AuthContext.Provider>{children}</AuthContext.Provider>;
};
export default AuthContextProvider;
// pages/_app.js
import NavBar from "../components/NavBar";
import AuthContextProvider from "../contexts/authContext";
import "../styles/globals.css";
function MyApp({ Component, pageProps }) {
return (
<AuthContextProvider>
<NavBar />
<Component {...pageProps} />
</AuthContextProvider>
);
}
export default MyApp;
// contexts/authContext
import { createContext, useState, useEffect } from "react";
import { netlifyIdentity } from "netlify-identity-widget";
export const AuthContext = createContext({
user: null,
login: () => {},
logout: () => {},
authReady: false,
});
const AuthContextProvider = ({ children }) => {
useEffect(() => {
netlifyIdentity.init();
}, []);
return <AuthContext.Provider>{children}</AuthContext.Provider>;
};
export default AuthContextProvider;
import { createContext, useState, useEffect } from "react";
import netlifyIdentity from "netlify-identity-widget";
export const AuthContext = createContext({
user: null,
login: () => {},
logout: () => {},
authReady: false,
});
const AuthContextProvider = ({ children }) => {
const [user, setUser] = useState(null);
useEffect(() => {
// on login
netlifyIdentity.on("login", (user) => {
setUser(user);
netlifyIdentity.close();
});
// on logout
netlifyIdentity.on("logout", (user) => {
setUser(null);
});
// connect with Netlify Identity
netlifyIdentity.init();
}, []);
const login = () => {
netlifyIdentity.open();
};
const logout = () => {
netlifyIdentity.logout();
};
const context = {
login,
logout,
user,
};
return (
<AuthContext.Provider value={context}>
{children}
</AuthContext.Provider>
);
};
export default AuthContextProvider;
// components/navbar
import styles from "../styles/Home.module.css";
import Link from "next/link";
import { useContext } from "react";
import { AuthContext } from "../contexts/authContext";
const NavBar = () => {
const { user, login, logout } = useContext(AuthContext);
return (
<nav className={styles.nav}>
<Link href="/">
<a>Home</a>
</Link>
<Link href="/about">
<a>About</a>
</Link>
<li>{!user && <button onClick={login}>Login/Signup</button>}</li>
<li>{user && <button onClick={logout}>Logout</button>}</li>
</nav>
);
};
export default NavBar;