为什么firebase.auth()。currenUser为null?

时间:2017-01-11 12:14:49

标签: javascript firebase firebase-authentication

EDIT2:

CODE:

<script>
    console.log("CURRENT USER:"+firebase.auth().currentUser);

    var inElements = document.getElementsByClassName('authIn');
    var outElements = document.getElementsByClassName('authOut');

    if (firebase.auth().currentUser == null) {

        for(var i=0; i < inElements.length; i++) { 
            inElements[i].style.display = "none";
        }
        for(var i=0; i < outElements.length; i++) { 
            outElements[i].style.display = "inline-block";
        }
    }
    else {

        for(var i=0; i < inElements.length; i++) { 
            inElements[i].style.display = "inline-block";
        }
        for(var i=0; i < outElements.length; i++) { 
            outElements[i].style.display = "none";
        }
    }
</script>

状况:

我登录,firebase.auth()。currentUser为null。

问题:

为什么以及如何解决?

登录代码:

<script>


            firebase.auth().signInWithEmailAndPassword(email, password ).then( authData => {
             //A LOT OF CODE FOR DIFFERENT SITUATIONS


            },function(error) { 

                var errorCode = error.code;
                var errorMessage = error.message;
                localStorage.setItem('error_msg_local', "Unknown user or password");
                window.location.href="/users/login";
                console.log("Login Failed: ", error);

            });


</script>

在登录代码中,我会根据身份验证的方式显示不同类型的错误消息。还有一些代码可以管理已验证和未验证的帐户。

1 个答案:

答案 0 :(得分:1)

您需要设置authdata变量,以便反映用户是否已登录。

您可以在初始化时运行此代码,该代码在firebase Auth对象上创建观察者。每当发生注销/登录更改时,authdata变量都会相应更新。

firebase.auth().onAuthStateChanged(function(user) {
  if (user) {
    authdata = user;
  }
  else {
   authdata = null;
  }
});

或者,如果由于某种原因你不想观察者的方法,你可以简单地设置你的authdata

authdata = firebase.auth().currentUser;

如果用户未登录,则authdata将设置为null,您的ejs应相应更新。

我假设您的ejs正在客户端上运行。如果不是,则您的ejs模板将无法获取这些更改。

您需要加载ejs脚本客户端并从那里运行模板。

请参阅:EJS Client Side Support以供参考。