Estoy usando angular-fire para la autenticación de firebase en Ionic-Capacitor. Funciona bien en la web y Android, pero no en IOS.
Cuando inspeccioné la actividad de la red de la aplicación, me di cuenta de que la aplicación puede obtener una respuesta de autenticación con éxito de firebase, pero no cumple con la llamada asíncrona.
Mi app.module.ts
@NgModule({ declarations: [AppComponent], entryComponents: [], imports: [BrowserModule, IonicModule.forRoot({mode: 'ios'}), AppRoutingModule, HttpClientModule, AngularFireModule.initializeApp(environment.firebaseConfig), AngularFireAuthModule, AngularFirestoreModule ]})
Así es como estoy inicializando Angular fire.
¡Este es un problema de FirebasePlugin! Todo lo que necesita hacer es inicializar AngularFire con el último método.
Método VIEJO (Incorrecto) -
@NgModule({ declarations: [AppComponent], entryComponents: [], imports: [BrowserModule, IonicModule.forRoot({mode: 'ios'}), AppRoutingModule, HttpClientModule, AngularFireModule.initializeApp(environment.firebaseConfig), AngularFireAuthModule, AngularFirestoreModule ]})
Método de trabajo (NUEVO)
import {getApp, initializeApp, provideFirebaseApp} from "@angular/fire/app"; import {getAuth, initializeAuth, provideAuth, indexedDBLocalPersistence} from "@angular/fire/auth"; @NgModule({ imports: [ provideFirebaseApp(() => initializeApp(environment.firebaseConfig)), provideAuth(() => { if (Capacitor.isNativePlatform()) { return initializeAuth(getApp(), { persistence: indexedDBLocalPersistence }) } else { return getAuth() } })] })
Después de modificar el enfoque de inicialización, deberá eliminar el uso de AngularFireAuth, en su lugar, utilícelo como:
import {Auth, createUserWithEmailAndPassword, signInWithEmailAndPassword} from "@angular/fire/auth"; export class UserService { constructor(private auth : Auth) { const user: any = await signInWithEmailAndPassword(this.auth,email,password); }
Además, puede visitar los últimos documentos de AngularFire para comprenderlo mejor.