diff --git a/.changeset/curly-elephants-cover.md b/.changeset/curly-elephants-cover.md new file mode 100644 index 00000000000..d3695d59f53 --- /dev/null +++ b/.changeset/curly-elephants-cover.md @@ -0,0 +1,5 @@ +--- +"@firebase/auth": patch +--- + +Fix bug with the user `emailVerified` field persistence across tabs diff --git a/packages/auth/src/core/user/user_impl.test.ts b/packages/auth/src/core/user/user_impl.test.ts index 8966cdb99f6..8b96f4dc31c 100644 --- a/packages/auth/src/core/user/user_impl.test.ts +++ b/packages/auth/src/core/user/user_impl.test.ts @@ -65,6 +65,7 @@ describe('core/user/user_impl', () => { stsTokenManager, displayName: 'displayName', email: 'email', + emailVerified: true, phoneNumber: 'phoneNumber', photoURL: 'photoURL' }); @@ -73,6 +74,7 @@ describe('core/user/user_impl', () => { expect(user.email).to.eq('email'); expect(user.phoneNumber).to.eq('phoneNumber'); expect(user.photoURL).to.eq('photoURL'); + expect(user.emailVerified).to.be.true; }); it('sets optional fields to null if not provided', () => { @@ -81,6 +83,7 @@ describe('core/user/user_impl', () => { expect(user.email).to.eq(null); expect(user.phoneNumber).to.eq(null); expect(user.photoURL).to.eq(null); + expect(user.emailVerified).to.be.false; }); }); diff --git a/packages/auth/src/core/user/user_impl.ts b/packages/auth/src/core/user/user_impl.ts index da62f2590d3..7e2760e36d7 100644 --- a/packages/auth/src/core/user/user_impl.ts +++ b/packages/auth/src/core/user/user_impl.ts @@ -83,6 +83,7 @@ export class UserImpl implements UserInternal { this.accessToken = stsTokenManager.accessToken; this.displayName = opt.displayName || null; this.email = opt.email || null; + this.emailVerified = opt.emailVerified || false; this.phoneNumber = opt.phoneNumber || null; this.photoURL = opt.photoURL || null; this.isAnonymous = opt.isAnonymous || false; diff --git a/packages/auth/src/platform_browser/persistence/local_storage.ts b/packages/auth/src/platform_browser/persistence/local_storage.ts index efde4fe0dc5..83a8808d054 100644 --- a/packages/auth/src/platform_browser/persistence/local_storage.ts +++ b/packages/auth/src/platform_browser/persistence/local_storage.ts @@ -52,13 +52,9 @@ class BrowserLocalPersistence constructor() { super(window.localStorage, PersistenceType.LOCAL); - this.boundEventHandler = this.onStorageEvent.bind(this); } - private readonly boundEventHandler: ( - event: StorageEvent, - poll?: boolean - ) => void; + private readonly boundEventHandler = (event: StorageEvent, poll?: boolean): void => this.onStorageEvent(event, poll); private readonly listeners: Record> = {}; private readonly localCache: Record = {}; // setTimeout return value is platform specific @@ -88,7 +84,7 @@ class BrowserLocalPersistence } } - private onStorageEvent(event: StorageEvent, poll: boolean = false): void { + private onStorageEvent(event: StorageEvent, poll = false): void { // Key would be null in some situations, like when localStorage is cleared if (!event.key) { this.forAllChangedKeys(