31
loading...
This website collects cookies to deliver better user experience
import firebase from "firebase/app";
import "firebase/auth";
var firebaseConfig = {
apiKey: process.env.FIREBASE_API_KEY,
authDomain: process.env.FIREBASE_AUTH_DOMAIN,
projectId: process.env.FIREBASE_PROJECT_ID,
storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.FIREBASE_APP_ID,
};
// Initialize Firebase
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}
export default firebase;
// ./hooks/useAuth.js
import firebase from "../lib/firebase";
import { useEffect, useState } from "react";
export const useAuth = () => {
const [user, setUser] = useState(null);
const [isLoading, setIsLoading] = useState(true);
const handleUser = (user) => {
if (user) {
setUser(user);
} else {
setUser(null);
}
setIsLoading(false);
};
const signIn = () => {
firebase
.auth()
.signInWithRedirect(new firebase.auth.GithubAuthProvider())
.then((result) => handleUser(result.user))
.catch((error) => console.log(error));
};
const signOut = () => {
firebase
.auth()
.signOut()
.then(() => handleUser(null));
};
useEffect(() => {
const unsubscribe = firebase.auth().onIdTokenChanged(handleUser);
return () => unsubscribe();
}, []);
return { user, isLoading, signIn, signOut };
};
import { useAuth } from "../hooks/useAuth";
export default function Home() {
const { user, isLoading, signIn, signOut } = useAuth();
if (isLoading) {
return <div>Loading Data..</div>;
}
return (
<div>
<main>
{user ? (
<button onClick={() => signOut()}>Sign Out</button>
) : (
<button onClick={() => signIn()}>Sign In</button>
)}
</main>
</div>
);
}