我试图在成功的firebase登录后检索经过身份验证的用户信息,但我似乎错过了一些东西。这是我的离子应用程序逻辑的一步一步的总结
authStatus()
method的按钮以检查用户是否已登录scheduleles.page.ts。如果用户未登录,则会显示模式authStatus() {
// if user is not signed in, present register modal
if (this.authService.user == null) {
this.presentModal();
}
// if user is not null, do something
}
// present & dismiss modal
async presentModal() {
const modal = await this.modalCtrl.create({
component: RegisterModalPage
});
return await modal.present();
}
模式显示应根据用户首选登录方式点击的按钮(gmail或facebook)
gmailReg()
方法。gmailReg() {
this.authService.signInWithGmail();
}
signInWithGmail()
方法来自authentication.service.ts
export class AuthenticateService {
public user = null;
constructor(public afAuth: AngularFireAuth) {}
signInWithGmail() {
this.afAuth.auth.signInWithRedirect(new auth.GoogleAuthProvider());
this.afAuth.auth.getRedirectResult().then(result => {
this.user = result.user;
});
}
}
在我的app.component.html文件中,我想显示经过身份验证的用户的displayName
<ion-toolbar>
<ion-title *ngIf="authService.user == null">Menu</ion-title>
<ion-title *ngIf="authService.user != null">{{
authService.user.displayName
}}</ion-title>
</ion-toolbar>
并在这样的app.module.ts中正确导入AuthenticateService
import { AuthenticateService } from "./auth/authenticate.service";
constructor(
public authService: AuthenticateService,
...
)
但是当signInWithGmail()
完成时,用户似乎仍然保持为空并且未设置为我打算使用它。我错过了什么?
从firebase google sign-in doc getRedirectResult
应该在页面加载时调用。所以我添加了一个方法来获取AuthenticateService
中的当前用户
currentUser() {
this.afAuth.auth.getRedirectResult().then(result => {
if (result.user) {
this.user = result.user;
// const token = result.credential.toJSON();
console.log(this.user);
}
});
}
然后像这样编辑了signInWithGmail()
方法
signInWithGmail() {
this.afAuth.auth.signInWithRedirect(new auth.GoogleAuthProvider());
}
现在我可以在应用程序的任何部分调用currentUser()
方法。但是一个问题是,当我在任何页面中调用该方法时,不会立即返回用户对象,并且需要一段时间才能使用。这还需要修复。