Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using with Angular 17 SSR -> document is not defined on initializeAppCheck #3488

Open
jjgriff93 opened this issue Jan 6, 2024 · 3 comments

Comments

@jjgriff93
Copy link

Version info

Angular:
17.0.8

Firebase:
10.7.1

AngularFire:
17.0.0

Other (e.g. Ionic/Cordova, Node, browser, operating system):
Node 18, Ionic 7, MacOS

How to reproduce these conditions

Steps to set up and reproduce

  1. New Angular 17 project
  2. ng add @angular/fire@17
  3. ng add @angular/ssr
  4. Set up App Check as per https://github.com/angular/angularfire/blob/master/docs/app-check.md
  5. ng build

Debug output

⠇ Building...
ReferenceError: document is not defined
    at makeDiv (/app/.angular/prerender-root/node_modules/@firebase/app-check/dist/esm/index.esm2017.js:1119:26)
    at initializeV3 (/app/.angular/prerender-root/node_modules/@firebase/app-check/dist/esm/index.esm2017.js:1064:19)
    at _ReCaptchaV3Provider.initialize (/app/.angular/prerender-root/node_modules/@firebase/app-check/dist/esm/index.esm2017.js:1255:9)
    at _activate (/app/.angular/prerender-root/node_modules/@firebase/app-check/dist/esm/index.esm2017.js:1543:20)
    at initializeAppCheck (/app/.angular/prerender-root/node_modules/@firebase/app-check/dist/esm/index.esm2017.js:1498:5)
    at <anonymous> (app/.angular/prerender-root/c56c3be0-e454-4b23-bf7d-d028ecf276ec/node_modules/@angular/fire/fesm2022/angular-fire.mjs:216:44)
    at <anonymous> (/app/.angular/prerender-root/c56c3be0-e454-4b23-bf7d-d028ecf276ec/node_modules/@angular/fire/fesm2022/angular-fire.mjs:148:57)
    at _ZoneDelegate.invoke (/app/.angular/prerender-root/node_modules/zone.js/fesm2015/zone.js:368:26)
    at _Zone.run (/app/.angular/prerender-root/node_modules/zone.js/fesm2015/zone.js:129:43)
    at _NgZone.runOutsideAngular (/app/.angular/prerender-root/node_modules/@angular/core/fesm2022/core.mjs:1461
An unhandled exception occurred: document is not defined

Expected behavior

AngularFire should check if rendering on a browser before calling App Check code and RecaptchaV3 (which relies on document being available)

Actual behavior

No check is done, so when providing App Check, this above error occurs as soon as pre-rendering on the server happens and document is accessed but isn't available due to not running in a browser

@jamesdaniels
Copy link
Member

It's older Angular but here's an example on how to use AppCheck with SSR

const admin = injector.get<app.App|null>(FIREBASE_ADMIN, null);

@jjgriff93
Copy link
Author

Thanks James, I've managed to work around it for now by using isPlatformServer()

provideAppCheck(() => {
      // Don't initialise AppCheck if running in server
      // Workaround for https://github.com/angular/angularfire/issues/3488
      const platformId = inject(PLATFORM_ID);
      if (isPlatformServer(platformId)) {
        return;
      }

      let provider: CustomProvider | ReCaptchaV3Provider;

      // Initialise AppCheck natively if running on iOS or Android
      if (Capacitor.isNativePlatform()) {
        // Set the web debug token to false if running on native
        globalThis.FIREBASE_APPCHECK_DEBUG_TOKEN = false;
        provider = new CustomProvider({
          getToken: () =>
            FirebaseAppCheck.getToken({
              forceRefresh: true
            }) as Promise<AppCheckToken>
        });
      } else {
        // Or use ReCAPTCHAv3 if running in web
        provider = new ReCaptchaV3Provider(
          environment.firebase.recaptchaSiteKey
        );
      }

      // Initialise AngularFire app check using provider
      const appCheck = initializeAppCheck(getApp(), {
        provider: provider
      });
      return appCheck;
    }),

Although now hitting a similar issue with Performance which the above doesn't seem to work for, so will raise that as a separate ticket

@jjgriff93
Copy link
Author

Raised in #3489

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants