mirror of
https://github.com/kevin-DL/commander_league_web.git
synced 2026-01-11 18:14:27 +00:00
64 lines
1.4 KiB
JavaScript
64 lines
1.4 KiB
JavaScript
import { useEffect, useState } from "react";
|
|
import { useRouter } from "next/router";
|
|
import firebase from "firebase/app";
|
|
import "firebase/auth";
|
|
import initFirebase from "../auth/initFirebase";
|
|
import {
|
|
removeUserCookie,
|
|
setUserCookie,
|
|
getUserFromCookie,
|
|
} from "./userCookies";
|
|
import { mapUserData } from "./mapUserData";
|
|
|
|
initFirebase();
|
|
|
|
const useUser = () => {
|
|
const [user, setUser] = useState();
|
|
const router = useRouter();
|
|
|
|
const logout = async () => {
|
|
return firebase
|
|
.auth()
|
|
.signOut()
|
|
.then(() => {
|
|
// Sign-out successful.
|
|
router.push("/auth");
|
|
})
|
|
.catch((e) => {
|
|
console.error(e);
|
|
});
|
|
};
|
|
|
|
useEffect(() => {
|
|
// Firebase updates the id token every hour, this
|
|
// makes sure the react state and the cookie are
|
|
// both kept up to date
|
|
const cancelAuthListener = firebase.auth().onIdTokenChanged((user) => {
|
|
if (user) {
|
|
const userData = mapUserData(user);
|
|
setUserCookie(userData);
|
|
setUser(userData);
|
|
} else {
|
|
removeUserCookie();
|
|
setUser();
|
|
}
|
|
});
|
|
|
|
const userFromCookie = getUserFromCookie();
|
|
if (!userFromCookie) {
|
|
// router.push('/')
|
|
return;
|
|
}
|
|
setUser(userFromCookie);
|
|
|
|
return () => {
|
|
cancelAuthListener();
|
|
};
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
}, []);
|
|
|
|
return { user, logout };
|
|
};
|
|
|
|
export { useUser };
|