刷新网页时未定义Firebase当前用户

时间:2018-06-19 10:38:04

标签: javascript firebase firebase-authentication

我的情景很简单。我创建了一个Firebase网络应用,并使用Google帐户进行连接。问题是我需要在每次刷新页面时重新登录,以下是步骤:

  • 初始化Firebase
  • 使用Google注册
  • 检查当前用户 - 它是经过身份验证的Google用户
  • 刷新页面
  • 初始化Firebase
  • 检查当前用户 - 未定义

代码很简单:

firebase.initializeApp(config);
var provider = new firebase.auth.GoogleAuthProvider();
firebase.auth().signInWithPopup(provider);
...
public onAuthStateChanged(context: any, user: any) {
        if (user) { ...
...
//currentUser is defined
get currentUser(): any {
    return firebase.auth().currentUser;
}

刷新页面

//currentUser is undefined
get currentUser(): any {
    return firebase.auth().currentUser;
}
...
if(!currentUser) {
    firebase.auth().signOut();
    firebase.initializeApp(config);
}

我知道Firebase会话持久性的选项,但我的理解是这种行为不是默认行为。参看医生:

https://firebase.google.com/docs/auth/web/auth-state-persistence

我将这一行添加到我的代码中以防万一,它没有区别:

firebase.auth().setPersistence(firebase.auth.Auth.Persistence.SESSION)

我还检查过匿名身份验证也是如此。

1 个答案:

答案 0 :(得分:2)

每次调用signInWithPopup(...)时,都会显示一个弹出窗口,要求用户签名。因此,只有在检测到用户未登录时,才应调用此方法。为此,请从您的onAuthStateChanged回调中调用它:

firebase.initializeApp(config);
var provider = new firebase.auth.GoogleAuthProvider();

...

public onAuthStateChanged(context: any, user: any) {
    if (user) { 
        console.log(user);
        ...
    }
    else {
        firebase.auth().signInWithPopup(provider);
    }
    ...
}