0

我的场景很简单。我创建了一个 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)

我还检查了匿名身份验证是否会发生同样的情况。

4

1 回答 1

3

每次调用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);
    }
    ...
}
于 2018-06-19T13:53:01.707 回答