diff --git a/.changeset/wicked-actors-clap.md b/.changeset/wicked-actors-clap.md new file mode 100644 index 00000000000..effcbe49678 --- /dev/null +++ b/.changeset/wicked-actors-clap.md @@ -0,0 +1,5 @@ +--- +"@firebase/firestore": patch +--- + +Fixes an issue that prevented the SDK from automatically retrieving custom User claims. diff --git a/packages/firestore/src/core/firestore_client.ts b/packages/firestore/src/core/firestore_client.ts index 2445b351113..9a764979f81 100644 --- a/packages/firestore/src/core/firestore_client.ts +++ b/packages/firestore/src/core/firestore_client.ts @@ -118,10 +118,8 @@ export class FirestoreClient { ) { this.credentials.setChangeListener(user => { logDebug(LOG_TAG, 'Received user=', user.uid); - if (!this.user.isEqual(user)) { - this.user = user; - this.credentialListener(user); - } + this.user = user; + this.credentialListener(user); this.receivedInitialUser.resolve(); }); } @@ -199,11 +197,15 @@ export async function setOfflineComponentProvider( const configuration = await client.getConfiguration(); await offlineComponentProvider.initialize(configuration); - client.setCredentialChangeListener(user => - client.asyncQueue.enqueueRetryable(async () => { - await handleUserChange(offlineComponentProvider.localStore, user); - }) - ); + let currentUser = configuration.initialUser; + client.setCredentialChangeListener(user => { + if (!currentUser.isEqual(user)) { + currentUser = user; + client.asyncQueue.enqueueRetryable(async () => { + await handleUserChange(offlineComponentProvider.localStore, user); + }); + } + }); // When a user calls clearPersistence() in one client, all other clients // need to be terminated to allow the delete to succeed.