Angular Fire - 没有 InjectionToken 的提供者(angularfire2.app.options)

2023-12-27

Context

我正在与Ionic 和 Angular & Angularfire 和 Firebase。我已经做了一个连接成功 to the Firestore数据库我能够操纵数据。

规格

   Ionic CLI                     : 6.18.1
   Ionic Framework               : @ionic/angular 6.0.11
   @angular-devkit/build-angular : 13.2.6
   @angular-devkit/schematics    : 13.2.6
   @angular/cli                  : 13.2.6
   @ionic/angular-toolkit        : 6.1.0
   @angular/angularfire          : 7.2.1 

实施

应用程序模块.ts

import { environment } from '../environments/environment';
import { initializeApp, provideFirebaseApp } from '@angular/fire/app';
import { provideAuth, getAuth } from '@angular/fire/auth';
import { provideFirestore, getFirestore } from '@angular/fire/firestore';

@NgModule({
    ...
    imports: [
      ...
      provideFirebaseApp(
          () => initializeApp(environment.firebaseConfig)), 
          provideAuth(() => getAuth()), 
          provideFirestore(() => getFirestore(),
      ),
    ],
    ...
})

现在我正在致力于整合谷歌认证。为此我一直在关注角度火灾存储库 https://github.com/angular/angularfire当然还有Angular Fire - 身份验证文档 https://github.com/angular/angularfire/blob/master/docs/auth/getting-started.md。哪里有实现内容的缩写(就像文档一样):

登录.page.ts

import { AuthenticationService } from 'src/app/services/authentication.service';

export class LoginPage implements OnInit {
    
    constructor(private authenticationSvc: AuthenticationService) { }

    login() { this.authenticationSvc.login(); }
}

认证.service.ts

import { AngularFireAuth } from '@angular/fire/compat/auth';
import firebase from 'firebase/compat/app';

export class AuthenticationService {

    constructor(private auth: AngularFireAuth) { }

    login() { this.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()); }
}

Problem

简而言之,如果我使用认证.service.ts on the 登录.page.ts该应用程序不再工作了。浏览器控制台输出以下错误:

ERROR Error: Uncaught (in promise): NullInjectorError: R3InjectorError(LoginPageModule)[AuthenticationService -> AuthenticationService -> AngularFireAuth -> InjectionToken angularfire2.app.options -> InjectionToken angularfire2.app.options -> InjectionToken angularfire2.app.options]: 
  NullInjectorError: No provider for InjectionToken angularfire2.app.options!
NullInjectorError: R3InjectorError(LoginPageModule)[AuthenticationService -> AuthenticationService -> AngularFireAuth -> InjectionToken angularfire2.app.options -> InjectionToken angularfire2.app.options -> InjectionToken angularfire2.app.options]: 
  NullInjectorError: No provider for InjectionToken angularfire2.app.options!
    at NullInjector.get (core.mjs:11120:1)
    at R3Injector.get (core.mjs:11287:1)
    at R3Injector.get (core.mjs:11287:1)
    at R3Injector.get (core.mjs:11287:1)
    at injectInjectorOnly (core.mjs:4765:1)
    at Module.ɵɵinject (core.mjs:4769:1)
    at Object.AngularFireAuth_Factory [as factory] (angular-fire-compat-auth.js:126:1)
    at R3Injector.hydrate (core.mjs:11457:1)
    at R3Injector.get (core.mjs:11276:1)
    at injectInjectorOnly (core.mjs:4765:1)
    at resolvePromise (zone.js:1262:1)
    at resolvePromise (zone.js:1216:1)
    at zone.js:1329:1
    at _ZoneDelegate.push.6084._ZoneDelegate.invokeTask (zone.js:443:1)
    at Object.onInvokeTask (core.mjs:25535:1)
    at _ZoneDelegate.push.6084._ZoneDelegate.invokeTask (zone.js:442:1)
    at Zone.push.6084.Zone.runTask (zone.js:214:1)
    at drainMicroTaskQueue (zone.js:632:1)

Solution

在文件上应用程序模块.ts添加以下提供者对象:

import { FIREBASE_OPTIONS } from '@angular/fire/compat';

@NgModule({
    ...
    providers: [
        { provide: FIREBASE_OPTIONS, useValue: environment.firebaseConfig }
    ],
})

所有道具都转到@Saumya 对此的回答question https://software-testing.com/topic/366351/no-provider-for-injectiontoken-angularfire2-app-options-ionic6/2#1.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular Fire - 没有 InjectionToken 的提供者(angularfire2.app.options) 的相关文章

随机推荐