Ess*_*sso 5 firebase angularfire ionic-framework angular capacitor
我一直在为 iOS 和 Android 开发一款新应用程序。我正在使用Ionic 5、Capacitor和Firebase 9在Angular 12上开发它上开发它。
虽然我习惯使用 AngularFireAuth 设置身份验证页面(登录/注册/密码重置),但我在使用 Ionic 和 Capacitor 进行同样的操作时遇到了麻烦。我的页面、服务和防护在浏览器上运行良好,但一旦我运行基于 XCode 的“ionic capsync”并尝试在我的 iPhone 上运行,我的登录功能就无法运行。
到目前为止,这是我的代码:
验证服务:
import { Injectable, NgZone } from '@angular/core';
import { User } from './authUser.model';
import { Router } from '@angular/router';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/compat/firestore';
@Injectable({
providedIn: 'root'
})
export class AuthService {
userData: any;
constructor(
public afStore: AngularFirestore,
public ngFireAuth: AngularFireAuth,
public router: Router,
public ngZone: NgZone
) {
this.ngFireAuth.authState.subscribe(user => {
if (user) {
this.userData = user;
localStorage.setItem('user', JSON.stringify(this.userData));
JSON.parse(localStorage.getItem('user'));
} else {
localStorage.setItem('user', null);
JSON.parse(localStorage.getItem('user'));
}
});
}
// Login in with email/password
SignIn(email, password) {
console.log('signing in from service');
return this.ngFireAuth.signInWithEmailAndPassword(email, password);
}
Run Code Online (Sandbox Code Playgroud)
登录页面:
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from '../shared/auth.service';
@Component({
selector: 'app-login',
templateUrl: './login.page.html',
styleUrls: ['./login.page.scss'],
})
export class LoginPage implements OnInit {
constructor(
public authService: AuthService,
public router: Router
) { }
ngOnInit() { }
logIn(email, password) {
this.authService.SignIn(email.value, password.value)
.then((res) => {
console.log('signing in from page');
if (this.authService.isEmailVerified) {
this.router.navigate(['tabs']);
} else {
window.alert('Email is not verified');
return false;
}
}).catch((error) => {
console.log(error);
window.alert(error.message);
});
}
}
Run Code Online (Sandbox Code Playgroud)
感谢您的投入!
我花了几天时间解决这个问题。我正在使用 Ionic 6、@angular/fire 7、Angular 14,但我相信修复方法是相同的。根据此链接回答
有一个修复此问题的方法,无需降级@angular/fire。它只涉及对 app.module.ts 文件进行轻微修改。
请参阅下面对ProvideAuth(() => getAuth())的更改
前:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { Platform } from '@ionic/angular';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { provideFirebaseApp } from '@angular/fire/app';
import { environment } from '../environments/environment';
import { provideAuth } from '@angular/fire/auth';
import { provideFirestore,getFirestore } from '@angular/fire/firestore';
import { provideStorage,getStorage } from '@angular/fire/storage';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
HttpClientModule,
provideFirebaseApp(() => initializeApp(environment.firebase)),
provideAuth(() => getAuth()),
provideFirestore(() => getFirestore()),
provideStorage(() => getStorage())],
providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
bootstrap: [AppComponent],
})
export class AppModule {}Run Code Online (Sandbox Code Playgroud)
后:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';
import { HttpClientModule } from '@angular/common/http';
import { Platform } from '@ionic/angular';
import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { getApp, initializeApp,provideFirebaseApp } from '@angular/fire/app';
import { environment } from '../environments/environment';
import { provideAuth,getAuth, initializeAuth, indexedDBLocalPersistence } from '@angular/fire/auth';
import { provideFirestore,getFirestore } from '@angular/fire/firestore';
import { provideStorage,getStorage } from '@angular/fire/storage';
import { Capacitor } from '@capacitor/core';
@NgModule({
declarations: [AppComponent],
imports: [BrowserModule,
IonicModule.forRoot(),
AppRoutingModule,
HttpClientModule,
provideFirebaseApp(() => initializeApp(environment.firebase)),
//provideAuth(() => getAuth()),
provideAuth(() => {
if (Capacitor.isNativePlatform()) {
return initializeAuth(getApp(), {
persistence: indexedDBLocalPersistence
});
} else {
return getAuth();
}
}),
provideFirestore(() => getFirestore()),
provideStorage(() => getStorage())],
providers: [{ provide: RouteReuseStrategy, useClass: IonicRouteStrategy }],
bootstrap: [AppComponent],
})
export class AppModule {}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |