Skip to content

Commit 51a90cf

Browse files
committed
Adding onFirebaseTokenChanged method for persistence
1 parent 4268eb0 commit 51a90cf

File tree

6 files changed

+1304
-1213
lines changed

6 files changed

+1304
-1213
lines changed

common/api-review/auth.api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ export interface Auth {
9292
languageCode: string | null;
9393
readonly name: string;
9494
onAuthStateChanged(nextOrObserver: NextOrObserver<User | null>, error?: ErrorFn, completed?: CompleteFn): Unsubscribe;
95+
// (undocumented)
96+
onFirebaseTokenChanged(nextOrObserver: NextOrObserver<FirebaseToken | null>, error?: ErrorFn, completed?: CompleteFn): Unsubscribe;
9597
onIdTokenChanged(nextOrObserver: NextOrObserver<User | null>, error?: ErrorFn, completed?: CompleteFn): Unsubscribe;
9698
setPersistence(persistence: Persistence): Promise<void>;
9799
readonly settings: AuthSettings;

packages/auth/demo/public/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -852,14 +852,14 @@
852852
</form>
853853
</div>
854854
<div class="tab-pane" id="tab-byo-ciam-content">
855+
<div id="firebase-token-status">No CIAM token found. User not logged in.</div>
855856
<h2>Sign in with your CIAM token</h2>
856857
<input type="text" id="byo-ciam-token"
857858
class="form-control" placeholder="Enter CIAM token" />
858859
<button class="btn btn-block btn-primary"
859860
id="exchange-token">
860861
Exchange Token
861862
</button>
862-
<pre id="byo-ciam-result"></pre>
863863
</div>
864864
<div class="tab-pane" id="logs-section">
865865
<pre class="well logs"></pre>

packages/auth/demo/src/index.js

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1520,16 +1520,15 @@ async function exchangeCIAMToken(token) {
15201520
function onExchangeToken(event) {
15211521
event.preventDefault();
15221522
const byoCiamInput = document.getElementById('byo-ciam-token');
1523-
const byoCiamResult = document.getElementById('byo-ciam-result');
1524-
1525-
byoCiamResult.textContent = 'Exchanging token...';
1523+
const firebaseTokenStatus = document.getElementById('firebase-token-status');
15261524

15271525
exchangeCIAMToken(byoCiamInput.value)
15281526
.then(response => {
1529-
byoCiamResult.textContent = response;
1527+
firebaseTokenStatus.textContent = "✅ Firebase token is set: " + response;
15301528
console.log('Token:', response);
15311529
})
15321530
.catch(error => {
1531+
firebaseTokenStatus.textContent = "Error exchanging token: ", error;
15331532
console.error('Error exchanging token:', error);
15341533
});
15351534
}
@@ -2091,6 +2090,18 @@ function initApp() {
20912090
tenantConfig: tenantConfig
20922091
});
20932092

2093+
if (regionalAuth.onFirebaseTokenChanged) {
2094+
regionalAuth.onFirebaseTokenChanged((token) => {
2095+
if (token) {
2096+
firebaseTokenStatus.textContent = "✅ Firebase token is set: " + token.token;
2097+
console.log("Token here:", token.token);
2098+
} else {
2099+
firebaseTokenStatus.textContent = "No CIAM token found. User not logged in.";
2100+
console.log("Token not available");
2101+
}
2102+
});
2103+
}
2104+
20942105
tempApp = initializeApp(
20952106
{
20962107
apiKey: config.apiKey,

packages/auth/src/core/auth/auth_impl.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
107107
private redirectPersistenceManager?: PersistenceUserManager;
108108
private authStateSubscription = new Subscription<User>(this);
109109
private idTokenSubscription = new Subscription<User>(this);
110+
private firebaseTokenSubscription = new Subscription<FirebaseToken>(this);
110111
private readonly beforeStateQueue = new AuthMiddlewareQueue(this);
111112
private redirectUser: UserInternal | null = null;
112113
private isProactiveRefreshEnabled = false;
@@ -407,6 +408,7 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
407408
private async initializeFirebaseToken(): Promise<void> {
408409
this.firebaseToken =
409410
(await this.persistenceManager?.getFirebaseToken()) ?? null;
411+
this.firebaseTokenSubscription.next(this.firebaseToken);
410412
}
411413

412414
useDeviceLanguage(): void {
@@ -467,6 +469,7 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
467469
firebaseToken: FirebaseToken | null
468470
): Promise<void> {
469471
this.firebaseToken = firebaseToken;
472+
this.firebaseTokenSubscription.next(firebaseToken);
470473
if (firebaseToken) {
471474
await this.assertedPersistence.setFirebaseToken(firebaseToken);
472475
} else {
@@ -588,6 +591,28 @@ export class AuthImpl implements AuthInternal, _FirebaseService {
588591
);
589592
}
590593

594+
onFirebaseTokenChanged(
595+
nextOrObserver: NextOrObserver<FirebaseToken | null>,
596+
error?: ErrorFn,
597+
completed?: CompleteFn
598+
): Unsubscribe {
599+
if (typeof nextOrObserver === 'function') {
600+
const unsubscribe = this.firebaseTokenSubscription.addObserver(
601+
nextOrObserver,
602+
error,
603+
completed
604+
);
605+
return () => {
606+
unsubscribe();
607+
};
608+
} else {
609+
const unsubscribe = this.firebaseTokenSubscription.addObserver(nextOrObserver);
610+
return () => {
611+
unsubscribe();
612+
};
613+
}
614+
}
615+
591616
beforeAuthStateChanged(
592617
callback: (user: User | null) => void | Promise<void>,
593618
onAbort?: () => void

packages/auth/src/model/public_types.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,12 @@ export interface Auth {
280280
callback: (user: User | null) => void | Promise<void>,
281281
onAbort?: () => void
282282
): Unsubscribe;
283+
284+
onFirebaseTokenChanged(
285+
nextOrObserver: NextOrObserver<FirebaseToken | null>,
286+
error?: ErrorFn,
287+
completed?: CompleteFn
288+
): Unsubscribe;
283289
/**
284290
* Adds an observer for changes to the signed-in user's ID token.
285291
*

0 commit comments

Comments
 (0)