Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

`beforeAuthStateChanged` imported from `@angular/fire/auth` makes `ng build` fail during route extraction

Ouverte
#3,748 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
76/100
Type d'issue
Bug
Clarté
Clairement spécifiée
Activité
Active
Stack technique
angular, typescript

Piste de recherche

Reproduisez l’échec d’extraction des routes SSR avec la configuration de l’application décrite, puis examinez la ligne 61 de src/auth/firebase.ts et le comportement des tâches en attente dans src/zones.ts. Comparez les wrappers associés dans src/messaging/firebase.ts et src/app/firebase.ts, et vérifiez que l’enregistrement du hook d’authentification n’empêche plus ng build de se terminer.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

comp: auth comp: ssr comp: zones type: bug
Description

@angular/fire/auth wraps beforeAuthStateChanged as ɵzoneWrap(_beforeAuthStateChanged, true) (src/auth/firebase.ts line 61). With that flag, the wrapper registers a pending task as soon as a callback is passed and clears it only when the callback first fires or the returned unsubscribe runs (src/zones.ts). This callback only fires when a sign-in or sign-out happens, so an app that registers the hook at startup holds the pending task open and ApplicationRef.isStable never becomes true for a visitor who is not signing in or out.

ng build route extraction waits on app stability, so any server-rendered app that registers this hook in its app config cannot build. Extraction hangs for about 30 seconds, then:

AbortError: Routes extraction was aborted.
TimeoutError: The operation was aborted due to timeout
Steps to reproduce
  1. Fresh ng new --ssr Angular 21 app, ng add @angular/fire@next.
  2. In app.config.ts, register beforeAuthStateChanged inside provideAppInitializer, imported from @angular/fire/auth. Registering it at startup is exactly what an SSR token-cookie sync does (docs/auth.md, Server-side Rendering section).
  3. ng build fails with the error above (34 seconds in my run).
  4. Change only the import to firebase/auth. The identical code builds in under 5 seconds.
Expected behavior

Registering the hook does not permanently block app stability. onMessage in src/messaging/firebase.ts wraps the same shape of API, a callback that may never fire, with the flag set to false, which still zone-wraps the callback and only skips the pending task. The same flag here looks like the fix, pending a check that nothing relies on the blocking behavior. onLog in src/app/firebase.ts has the same shape and is worth sweeping at the same time.

Workarounds in the wild

Our own sample already imports beforeAuthStateChanged from firebase/auth (sample/src/app/auth/auth.component.ts), and the rewritten SSR docs section in #3740 documents that import as the way around this bug.

Versions

Reproduced on an Angular 21 app against the @angular/fire 21 canary. The wrapper is unchanged on current main.

Langage dominant
TypeScript
Étoiles
7.8k
Forks
2.2k
Merge moyen
3 j 6 h
PR mergées (30 j)
5

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de angular/angularfire

Toutes les issues de angular/angularfire

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.