Firebase登录成功但无法检索用户信息

问题描述 投票:0回答:1

我试图在成功的firebase登录后检索经过身份验证的用户信息,但我似乎错过了一些东西。这是我的离子应用程序逻辑的一步一步的总结

  1. 用户单击调用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)

  1. 用户点击按钮以使用gmail帐户登录,该帐户调用register-modal.page.ts的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()完成时,用户似乎仍然保持为空并且未设置为我打算使用它。我错过了什么?

javascript firebase-authentication angular7 ionic4
1个回答
0
投票

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()方法。但是一个问题是,当我在任何页面中调用该方法时,不会立即返回用户对象,并且需要一段时间才能使用。这还需要修复。

© www.soinside.com 2019 - 2024. All rights reserved.