代码之家  ›  专栏  ›  技术社区  ›  pasx

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

  •  0
  • pasx  · 技术社区  · 6 年前

    我的设想很简单。我创建了一个firebase web应用程序,并使用google帐户进行连接。问题是我需要在每次刷新页面时重新登录,以下是步骤:

    • 火基初始化
    • 注册谷歌
    • 检查当前用户-它是经过认证的google用户
    • 刷新页面
    • 火基初始化
    • 检查当前用户-未定义

    代码很简单:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Frank van Puffelen    6 年前

    每次你打电话 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);
        }
        ...
    }