Skip to content

Instantly share code, notes, and snippets.

@polRk
Created May 11, 2020 15:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save polRk/49d73e0b8368ed84c62795520e325a34 to your computer and use it in GitHub Desktop.
Save polRk/49d73e0b8368ed84c62795520e325a34 to your computer and use it in GitHub Desktop.
React Firebase useAuth
import * as firebase from 'firebase/app'
import { useEffect, useState, createContext } from 'react'
export type AuthState = {
initializing: boolean
user: firebase.User | null
}
export const userContext = createContext<AuthState>({
initializing: true,
user: null,
})
export const useAuth = () => {
const [state, setState] = useState<AuthState>({
initializing: true,
user: null,
})
useEffect(() => {
const unsubscribe = firebase.auth().onIdTokenChanged(async (user) => {
if (user) {
const token = await user.getIdToken()
localStorage.setItem('token', token)
}
})
return () => unsubscribe()
}, [])
useEffect(() => {
const unsubscribe = firebase.auth().onAuthStateChanged(async (user) => {
if (user) {
const token = await user.getIdToken()
localStorage.setItem('token', token)
}
setState({ initializing: false, user })
})
return () => unsubscribe()
}, [])
return state
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment