Свойство 'auth' не существует для типа 'AngularFireAuth', использующего точно такой же код, что и в других проектах. - PullRequest
2 голосов
/ 01 апреля 2020

Я понимаю, что этот вопрос задавался ранее, но ни одно из решений, которые я видел, не работает для меня. Я создаю страницу входа для моего приложения ioni c с использованием firebase-ui, я использую тот же подход, что и в других приложениях, и он работает там. Я установил angularFire и firebase-ui и импортировал их в мой app.module следующим образом

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { AngularFireModule } from '@angular/fire';
import { environment } from '../environments/environment';
import { AngularFirestoreModule } from '@angular/fire/firestore';
import { AngularFireAuthModule } from '@angular/fire/auth';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [
    AngularFireModule.initializeApp(environment.firebase),
    AngularFirestoreModule,
    AngularFireAuthModule,
    BrowserModule,
    IonicModule.forRoot(),
    AppRoutingModule,
  ],
  providers: [
    StatusBar,
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

Затем, в моем файле login.ts, я получил этот

import { Component, OnInit, NgZone, OnDestroy } from '@angular/core';
import * as firebaseui from 'firebaseui';
import * as firebase from 'firebase/app';
import { Router } from '@angular/router';
import { LoadingController } from '@ionic/angular';
import { AngularFireAuth } from '@angular/fire/auth/auth';

@Component({
  selector: 'app-login',
  templateUrl: './login.page.html',
  styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit, OnDestroy {
  ui: firebaseui.auth.AuthUI;

  constructor(
    private router: Router,
    private loadingCtrl: LoadingController,
    private afAuth: AngularFireAuth,
    private ngZone: NgZone) { }

  ngOnInit() {
    const uiConfig = {
      signInOptions: [
        firebase.auth.GoogleAuthProvider.PROVIDER_ID,
        firebase.auth.EmailAuthProvider.PROVIDER_ID
      ],
      callbacks: {
        signInSuccessWithAuthResult: this.onLoginSuccessful.bind(this)
      }
    };
    this.ui = new firebaseui.auth.AuthUI(this.afAuth.auth); // This line gets the error
    this.ui.start('#firebaseui-auth-container', uiConfig);
  }

  ngOnDestroy() {
    this.ui.delete();
  }
  onLoginSuccessful(result) {
    console.log('Firebase login result: ', result);
    this.ngZone.run(() => {
      this.router.navigateByUrl('/secciones');
    });
  }

}

Я использовал этот код несколько раз ранее, и я полностью озадачен, почему свойство auth не найдено. Я испробовал несколько вариантов кода, и по какой-то причине что-то не работает, я был бы признателен за любую информацию о том, почему. Конечно, я добавил конфигурацию firebase в свою среду и добавил соответствующие пакеты "firebase": "^ 7.10.0" и "firebaseui": "^ 4.4.0",

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Добавление к ответу Маркуса:

Измените что-то вроде этого:

const user = this.afAuth.auth.currentUser;

на:

const user = await this.afAuth.currentUser;

Но убедитесь, что оно находится в асин c функция.

2 голосов
/ 04 апреля 2020

Возможно, вы используете новую версию (6.0) AngularFire. Они удалили свойство auth и теперь оно обещано прокси. Попробуйте изменить код на:

this.ui = new firebaseui.auth.AuthUI(this.afAuth);
...