我有一个使用Firebase进行身份验证的项目。当我登录我的项目时,有时firebase.auth().currentUser
方法会从其他用户返回信息。有时我会从实际当前用户那里获得信息,有时也会从以前登录的用户那里获取信息 - 当发生这种情况时,纠正问题并获取正确用户数据的唯一方法是注销并重新登录。
我的登录方式:
onLoginClick = () => {
firebase.auth().signInWithEmailAndPassword(this.state.email.trim(), this.state.password.trim())
.then((user) => {
//Some redirects depending on my users role
})
.catch((error) => {
console.log(error, error.message);
if (error.code == "auth/user-not-found" || error.code == "auth/wrong-password") {
//Handle error
}
});
}
我的退出方法:
onLogoutClick = () => {
firebase.auth().signOut().then(function () {
this.props.history.replace("/")
}).catch(function (error) {
console.log(error);
});
}
他们非常标准但似乎我做错了什么。我已尝试在注销方法上清除sessionStorage
和localStorage
,但这并没有帮助。
更新:
我尝试过一些建议,比如:
firebase.auth().signOut().then(() => {
firebase.auth().signInWithEmailAndPassword(email, password).then((user) => {
//My redirects and everything
})
})
但这不起作用。
另外,我注意到当我登录并使用错误的凭据时,sessionStorage会获得先前已登录用户的条目,即使我已将其签名。
答案 0 :(得分:0)
我非常确定在新登录会话初始化期间,直到完成,currentUser
尚未更新;在传递这些方法时,使用user
参数。由于登录仍在进行中,因此还没有currentUser
,因此它会通过user
参数传递正在进行的用户。 (我认为这意味着有可能在第一次有人登录时会null
,而之后它将是之前的一个,除非在某些代码注销时清除它。)
在提供user
参数时使用onAuthStateChanged
参数,例如在{{1}}处理程序中。请参阅第一个示例here,并在同一页面的蓝色框中加注星号。