Skip to content

Commit 7f2cdfe

Browse files
authored
Refresh user profile on ID token change (#2132)
1 parent b4bee27 commit 7f2cdfe

File tree

2 files changed

+12
-3
lines changed

2 files changed

+12
-3
lines changed

web/src/app/services/auth/auth.service.spec.ts

+7-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,13 @@ describe('AuthService', () => {
3333
providers: [
3434
{provide: AngularFirestore, useValue: {}},
3535
{provide: AngularFireFunctions, useValue: {}},
36-
{provide: AngularFireAuth, useValue: {authState: NEVER}},
36+
{
37+
provide: AngularFireAuth,
38+
useValue: {
39+
authState: NEVER,
40+
onIdTokenChanged: (callback: Function) => callback(null),
41+
},
42+
},
3743
{provide: DataStoreService, useValue: {user$: () => of()}},
3844
{provide: Router, useValue: {}},
3945
{provide: HttpClientService, useValue: {}},

web/src/app/services/auth/auth.service.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ import {AngularFireAuth} from '@angular/fire/compat/auth';
1919
import {AngularFireFunctions} from '@angular/fire/compat/functions';
2020
import {GoogleAuthProvider} from 'firebase/auth';
2121
import firebase from 'firebase/compat/app';
22-
import {Observable, firstValueFrom, from} from 'rxjs';
23-
import {map, shareReplay, switchMap} from 'rxjs/operators';
22+
import {Observable, Subject, firstValueFrom, from} from 'rxjs';
23+
import {map, mergeWith, shareReplay, switchMap} from 'rxjs/operators';
2424

2525
import {AclEntry} from 'app/models/acl-entry.model';
2626
import {DataCollectionStrategy, Job} from 'app/models/job.model';
@@ -52,6 +52,7 @@ export const ROLE_OPTIONS = [
5252
})
5353
export class AuthService {
5454
private user$: Observable<User>;
55+
private tokenChanged$ = new Subject<firebase.User | null>();
5556
private currentUser!: User;
5657
private hasAcceptedTos = false;
5758

@@ -62,7 +63,9 @@ export class AuthService {
6263
private functions: AngularFireFunctions,
6364
private httpClientService: HttpClientService
6465
) {
66+
this.afAuth.onIdTokenChanged(user => this.tokenChanged$.next(user));
6567
this.user$ = this.afAuth.authState.pipe(
68+
mergeWith(this.tokenChanged$),
6669
switchMap(user => from(this.onAuthStateChange(user))),
6770
map(user => user || ANONYMOUS_USER),
6871
// Cache last authenticated user so that late subscribers receive it as well.

0 commit comments

Comments
 (0)