第一次使用Firebase,所以我不知道发生了什么。我没有修改使用
ng add @angular/fire
得到的配置,所以我的AppModule
中的配置是:
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
AppRoutingModule,
provideFirebaseApp(() => initializeApp(environment.firebase)),
provideFirestore(() => getFirestore()),
provideAuth(() => getAuth()),
provideDatabase(() => getDatabase()),
provideFunctions(() => getFunctions()),
provideMessaging(() => getMessaging()),
provideRemoteConfig(() => getRemoteConfig()),
provideStorage(() => getStorage()),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
在不同的模块中,使用延迟加载,我调用方法
signInWithEmailAndPassword(auth, email, password)
,但在控制台中收到以下错误:
Either AngularFireModule has not been provided in your AppModule (this can be done manually or implictly using
provideFirebaseApp) or you're calling an AngularFire method outside of an NgModule (which is not supported).
我错过了什么?
好的,我找到了这个问题的解决方案。
看来您需要在您的服务中注入 angularfire 的 auth 实例。
import {Auth, sendPasswordResetEmail, signOut} from '@angular/fire/auth';
@Injectable({
providedIn: 'root'
})
@Injectable()
export class FirebaseAuthService {
constructor(..., private auth: Auth,) {
}
getFirebaseUser(): any {
return this.auth.currentUser;
}
logout() {
signOut(this.auth);
}
resetPassword(email: string) {
return sendPasswordResetEmail(this.auth, email);
}
if (this.credentialsForm.valid) {
signInWithEmailAndPassword(this.auth,this.credentialsForm.controls.email.value,
this.credentialsForm.controls.password.value).then(result => { ... }
}
}
使用此实例后,它就像魅力一样。
错误:您的 AppModule 中尚未提供 AngularFireModule (这可以手动或隐式使用 ProvideFirebaseApp)或者您在 NgModule 之外调用 AngularFire 方法(不支持)。