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

Javascript firebase-firebase当前用户未存储正确的用户,javascript,reactjs,firebase,local-storage,firebase-authentication,Javascript,Reactjs,Firebase,Local Storage,Firebase Authentication,我有一个使用Firebase进行身份验证的项目。当我登录到我的项目时,有时firebase.auth().currentUser方法会从其他用户返回信息。有时我从实际的当前用户,有时从以前登录的用户那里获得信息-发生这种情况时,纠正问题并为正确的用户获取数据的唯一方法是注销并再次登录 我的登录方式: onLoginClick = () => { firebase.auth().signInWithEmailAndPassword(this.state.email.trim(), this.

我有一个使用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);
    });
}
他们很标准,但似乎我做错了什么。我已尝试在注销方法上清除
会话存储
本地存储
,但没有任何帮助

更新:

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

firebase.auth().signOut().then(() => {
    firebase.auth().signInWithEmailAndPassword(email, password).then((user) => {
        //My redirects and everything
    })
})
但这不起作用


此外,我还注意到,当我登录并使用错误的凭据时,会话存储会与以前登录的用户一起获得一个条目,即使我已将其注销。

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


在提供
user
参数时使用它,例如在
onAuthStateChanged
处理程序中。请参见第一个示例,以及同一页面下方蓝色框中的星号注释。

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


在提供
user
参数时使用它,例如在
onAuthStateChanged
处理程序中。请参见第一个示例,以及同一页面下方蓝色框中带星号的注释。

登录前,请检查当前用户是否为零。如果没有调用您的注销功能,那么请让用户登录。这很可能是因为老用户仍在登录。如何退出应用程序?用户是否保持登录状态?@DoesData当我注销用户时;将我的应用重定向到主屏幕,所有已登录用户选项消失,我检查了开发者控制台,localStorage似乎没有currentUser密钥。但是,当我再次登录时,即使我以前检查过,有时也会得到错误的信息。在登录之前,请检查当前用户是否为零。如果没有调用您的注销功能,那么请让用户登录。这很可能是因为老用户仍在登录。如何退出应用程序?用户是否保持登录状态?@DoesData当我注销用户时;将我的应用重定向到主屏幕,所有已登录用户选项消失,我检查了开发者控制台,localStorage似乎没有currentUser密钥。但是,当我再次登录时,即使我之前检查过,有时也会得到错误的信息。我在下一个屏幕中使用
firebase.auth().currentUser
,只有在登录成功并完成问题后才能访问该屏幕,而代码摘录实际上并未显示如何使用
currentUser
(它一点也不出现),因此我只能根据这方面的常见问题进行推测。是否有更完整的代码示例可供使用?您能否用一段相当简单的示例代码重现该问题?我猜最后一个问题是您是否直接使用
firebase.auth().currentUser
(而不是通过变量等保存)或者如果这只是在更复杂的代码中进行操作的简写/伪代码。登录后,我重定向到另一个组件(我使用ReactJS),在该组件中,我需要查询用户节点以检索有关用户的一些信息。我尝试执行的查询示例是
firebase.database().ref('notifications/pending/'+firebase.auth().currentUser.uid+'/'+key)。一次('value')。然后(notifications=>{//setstate the number of notifications});
我想问题是“登录后”是什么表示,即这些调用的上下文。如果直接或间接从
signInWithEmailAndPassword()调用。然后,
我不确定currentUser字段是否已更新。调用代码可能会更新。如果您对身份验证感到满意,您可以尝试将
用户
分配给
currentUser
,作为测试。我已删除我的误导性(signInWithRedirect)注释。忽略它。如果您在
然后
登录的
代码中,您可能需要将
用户
参数传递给您调用的任何对象。我认为这里的问题是,从
登录的
然后
引用
当前用户
还为时过早。我正在使用
firebase.auth().currentUser
在下一个屏幕中,只有在登录成功并完成问题后才能访问该屏幕,代码摘录实际上没有显示如何使用
currentUser
(它根本没有出现),因此我只能根据这一领域的常见问题进行推测