-
Notifications
You must be signed in to change notification settings - Fork 985
Description
[REQUIRED] Describe your environment
- Operating System version: iOS 16.3.1
- Browser version: Safari 16.3.1
- Firebase SDK version: 9.15.0
- Firebase Product: auth
[REQUIRED] Describe the problem
Steps to reproduce:
On loading, our React app immediately loads a component that does the following:
- calls
getAuth() - runs a hook to setup
onAuthStateChanged - once
onAuthStateChangedhandler is called for 1st time we check for a valid user object - If no valid user object exists call
signInAnonymously
What we're observing in our production env on an irregular basis is that the onAuthStateChanged is called multiple times with different a uid everytime.
More specifically, the 1st time app is opened on a "clean" browser, there is no persisted user uid for Firebase auth so the onAuthStateChanged handler fires with null user, we perform signInAnonymously, and onAuthStateChanged is fired again with valid uid.
Next time app is opened (few mins later) we can see onAuthStateChanged fired mutliple times in sequence with an alternating uid provided - one time the previous uid from the first-time open and a new uid.
Expectation is that the previous session's uid will be provided OR that a new uid be created but would not change - onAuthStateChanged should not be called with multiple diff values of uid for the same browser session.
Relevant Code:
export default function ClientAuthProvider() {
const [user, setUser] = useState(null);
const auth = getAuth(firebaseApp);
useEffect(() => {
const unsub = onAuthStateChanged(auth, user => {
if (user) {
setUser(user);
} else {
signInAnonymously(auth)
.catch(error => {
setUser(null)
})
}
})
return () => {
unsub();
}
}, []);
}This wasn't reproducible in testing envs and happens only on occasion on production.
Could it be that calling getAuth() multiple times would create more than 1 instance of the auth service? Could it be that calling signInAnonymously too early would cause a race condition in auth service to generate two uid for same browser?
This issue looks similar in some ways to the issue described in #6827