刷新后,firebase Auth当前用户返回null

时间:2019-10-07 00:11:19

标签: javascript angular firebase firebase-authentication

这是我的个人资料页面上的代码,当我从AuthService的登录方法重定向时,此方法第一次正常工作

const user = firebase.auth().currentUser;
  if (user != null) {
    this.name = user.displayName;
    this.uid = user.uid;
  } else {
    this.name = "Unknown";
  }

但是,如果我刷新页面或转到任何其他页面并返回此个人资料页面,则currentUser将为空。

这是我的身份验证服务代码。

import * as firebase from "firebase/app";
import { auth } from "firebase/app";

      async googleSignin() {
    firebase
      .auth()
      .setPersistence(firebase.auth.Auth.Persistence.LOCAL)
      .then(async () => {
        const provider = new auth.GoogleAuthProvider();
        const credential = await this.afAuth.auth.signInWithPopup(provider);
        this.updateUserData(credential.user);
        this.router.navigate(["/profile"]);
        return;
      });
  }

为什么我失去了currentUser?我什至还添加了Persistence.LOCAL。

2 个答案:

答案 0 :(得分:2)

导航到新页面时,将重新加载Firebase身份验证SDK。此时,Firebase会自动刷新当前用户的身份验证状态,但这可能需要往返服务器。到您的firebase.auth()。currentUser运行时,显然还没有完成刷新。

因此,您应使用onAuthStateChange来监听更改,如getting the currently signed in user上的文档所示:

firebase.auth().onAuthStateChanged(function(user) {
  if (user != null) {
    this.name = user.displayName;
    this.uid = user.uid;
  } else {
    this.name = "Unknown";
  }
});

答案 1 :(得分:1)

您还可以将用户数据保存到本地/会话存储中,以防服务/防护由于异步操作而无法及时接收到该数据。