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>
在登录代码中,我会根据身份验证的方式显示不同类型的错误消息。还有一些代码可以管理已验证和未验证的帐户。
答案 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以供参考。