(Firebase/ionic/angularjs 2)を使用してGoogle認証でログインしようとしました。
import { Component } from '@angular/core';
import { NavController } from 'ionic-angular';
import { Observable } from 'rxjs/Observable';
import { AngularFireAuth } from 'angularfire2/auth';
import * as firebase from 'firebase/app';
@Component({
selector: 'page-home',
templateUrl: 'home.html'
})
export class HomePage {
user: Observable<firebase.User>;
constructor(public navCtrl: NavController,public afAuth: AngularFireAuth) {
this.user = afAuth.authState;
}
login() {
this.afAuth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider());
}
logout() {
this.afAuth.auth.signOut();
}
}
しかし、エラーが発生しています:
Error: Uncaught (in promise): Error: No provider for AngularFireAuth!
Error: No provider for AngularFireAuth!
私たちのコードで何が機能しているかを教えてください。
@rmalviyaが提案したことの明確化として、現在Ionicバージョン3.x.xにいると仮定します。このバージョンでは、ネイティブプラグインをインポートし、プラグインの各プロバイダーを追加する2つの方法があります。
1)現在のページのTypeScriptファイルにプロバイダーを追加できます。そのようです:
import { AngularFireAuth } from 'angularfire2/auth';
...
@Component({
selector: 'page-home',
templateUrl: 'home.html',
providers: [AngularFireAuth]
})
2)2つ目の方法は、app.modules.tsにインポートして、プラグインをプロバイダーに追加することです。
import { AngularFireAuth } from 'angularfire2/auth';
...
providers: [
StatusBar,
SplashScreen,
{provide: ErrorHandler, useClass: IonicErrorHandler},
AngularFireAuth
]
ここで解決https://github.com/iglewski/Annotator/issues/
app.component.spec.ts:
import { FirebaseApp, FirebaseAppConfig, AngularFireModule } from 'angularfire2';
import { AngularFireAuth, AngularFireAuthModule } from 'angularfire2/auth';
import { AngularFireDatabaseModule } from 'angularfire2/database';
import * as firebase from 'firebase/app';
import { firebaseConfig } from './app.module';
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
AppComponent
],
imports: [
AngularFireModule.initializeApp(firebaseConfig), //ajout
AngularFireAuthModule, //ajout
AngularFireDatabaseModule //ajout
],
}).compileComponents();
}));
IonicPageModule システムを使用している場合は、app.module.ts
にAngularFireAuth
をインポートし、プロバイダー配列のpage.module.ts
にインポートする必要があります。
app.module.ts:
@NgModule({
...
providers: [AngularFireAuth]
...
page.module.ts:
@NgModule({
declarations: [
SignupPage,
],
imports: [
IonicPageModule.forChild(SignupPage)
],
exports: [
SignupPage
],
providers: [
AngularFireAuth
]
})