Files
commander_league_web/utils/auth/useUser.js

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 }