firebase - Firebase当前用户未存储正确的用户

时间:2017-09-26 19:57:30

标签: javascript reactjs firebase local-storage firebase-authentication

我有一个使用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);
    });
}

他们非常标准但似乎我做错了什么。我已尝试在注销方法上清除sessionStoragelocalStorage,但这并没有帮助。

更新:

我尝试过一些建议,比如:

firebase.auth().signOut().then(() => {
    firebase.auth().signInWithEmailAndPassword(email, password).then((user) => {
        //My redirects and everything
    })
})

但这不起作用。

另外,我注意到当我登录并使用错误的凭据时,sessionStorage会获得先前已登录用户的条目,即使我已将其签名。

1 个答案:

答案 0 :(得分:0)

我非常确定在新登录会话初始化期间,直到完成,currentUser尚未更新;在传递这些方法时,使用user 参数。由于登录仍在进行中,因此还没有currentUser,因此它会通过user参数传递正在进行的用户。 (我认为这意味着有可能在第一次有人登录时会null,而之后它将是之前的一个,除非在某些代码注销时清除它。)

在提供user参数时使用onAuthStateChanged参数,例如在{{1}}处理程序中。请参阅第一个示例here,并在同一页面的蓝色框中加注星号。