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 }
|