См. Проблему здесь (открытая консоль):
https://stackblitz.com/edit/angular-su5p89?file=src%2Fapp%2Fapp.module.ts
Я импортировал и вызвал initalizeApp
в моем AppModule
, например:
import { AngularFireModule } from '@angular/fire';
import { AngularFireAuthModule } from '@angular/fire/auth';
import { AngularFirestoreModule } from '@angular/fire/firestore';
@NgModule({
imports: [
BrowserModule.withServerTransition({ appId: 'serverApp' }),
// Firebase
AngularFireModule.initializeApp(environment.firebase),
AngularFirestoreModule,
AngularFireAuthModule,
// App
AppRoutingModule
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
export class AppModule {}
Затем я создал охранник, который выглядит следующим образом:
import { Injectable } from '@angular/core';
import { CanActivate, CanActivateChild, CanLoad } from '@angular/router';
import * as firebase from 'firebase/app';
@Injectable({
providedIn: 'root'
})
export class AuthGuard implements CanActivate, CanActivateChild, CanLoad {
/** @ignore */
constructor() {}
canLoad(): boolean {
return this.performCheck();
}
canActivate(): boolean {
return this.performCheck();
}
canActivateChild(): boolean {
return this.performCheck();
}
private performCheck() {
return !!firebase.auth().currentUser;
}
}
И использую его так:
export const Routes = [
{
path: '',
pathMatch: 'full',
redirectTo: 'hello'
},
{
path: 'hello',
component: HelloComponent,
canActivate: [AuthGuard]
}
];
Однако, это приводит к следующей ошибке:
ОШИБКА Ошибка: Uncaught (в обещании): [DEFAULT]: Firebase: не создано приложение Firebase '[DEFAULT]' - вызовите Firebase App.initializeApp () (app / no-app).[DEFAULT]: Firebase: приложение Firebase «[DEFAULT]» не создано - вызовите Firebase App.initializeApp () (app / no-app).при ошибке (index.cjs.js: 361) в приложении (index.cjs.js: 244) в Object.serviceNamespace [как auth] (index.cjs.js: 302) в AuthGuard.performCheck (auth.guard.ts:35) в AuthGuard.canActivate (auth.guard.ts: 29) в eval (check_guards.ts: 121) в Observable.eval [как _subscribe] (defer.ts: 59) в Observable._trySubscribe (Observable.ts: 231)в Observable.subscribe (Observable.ts: 212) в TakeOperator.call (take.ts: 72) в resolPromise (zone.js: 831) в resolPromise (zone.js: 788) в eval (zone.js: 892) вZoneDelegate.invokeTask (zone.js: 423) в Object.onInvokeTask (ng_zone.ts: 262) в ZoneDelegate.invokeTask (zone.js: 422) в Zone.runTask (zone.js: 195) в сливеMicroTaskQueue (zone.js: zone: js601)
Что означает, что при рассмотрении других проблем приложение еще не инициализировало Firebase, что странно, поскольку я делаю это раньше всего на свете ... И теоретически охранник должен запускаться ПОСЛЕ все это происходит, верно?
Как я могу решить это?