How to know if Firebase Auth is currently retrieving user?

2022 Edit: in firebase web SDK 9, it's

import { getAuth, onAuthStateChanged } from "firebase/auth";
const auth = getAuth();
export const isReady = new Promise(resolve => {
  const unsubscribe = onAuthStateChanged(auth, (/* user */) => {
    resolve(/* user */)
    unsubscribe()
  })
})

P.S: The reason I don't resolve with the user is because it is available at auth.currentUser, while the promise would retain an outdated value.


Looking at similar questions such as Pattern for Firebase onAuthStateChanged and Navigation Guards - Quasar app it seems this is indeed the way it's done.

So I have come up with the following to differentiate the initial condition:

export const isReady = new Promise(resolve => {
  const unsubscribe = firebase.auth().onAuthStateChanged(() => {
    resolve()
    unsubscribe()
  })
})

I export this Promise from the module where I wrap firebase, so I can begin other initialization while waiting for an authoritative authentication state.