1

我一直在使用火力地堡的认证项目。当我登录到我的项目时,有时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,但这没有帮助。

UPDATE:

我一些建议,试图像做:

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

但是,这是行不通的。

另外,我注意到,当我登录并使用错误的凭据,在sessionStorage的获取与用户先前签署的项目,即使我签他。

+1

之前您登录检查,如果当前用户是零。如果它没有呼叫您的注销功能,请将用户签入。最有可能发生这种情况的原因是,旧用户仍然登录。您如何退出应用程序?用户是否保持登录状态? – DoesData

+0

@DoesData当我注销用户它;将我的应用重定向到主屏幕,所有登录的用户选项消失,我检查了开发者控制台,localStorage好像没有当前用户密钥。但是,当我再次登录时,即使我之前检查过,有时也会得到错误的信息。 –

回答

0

我敢肯定,新的登录会话初始化过程中,直至完成,currentUser尚未更新;当传入这些方法时,使用user参数。因为登录依然是进行,现在还没有一个currentUser,所以它传递通过user参数正在进行的用户。 (我认为这意味着很可能,这将是null第一次有人登录,这将是前一后,除非它是由一些代码在注销清除。)

使用user参数时,它是例如在onAuthStateChanged处理程序中提供。请参见第一个示例here和蓝色框中加星号的音符,使其位于同一页面的下方。

+0

我现在用的是'firebase.auth()。currentUser'在下一屏,登录为全成后只能被访问,并已完成 –

+0

的问题和代码摘录实际上并没有说明如何'正在使用currentUser' (它根本没有出现),所以我只能根据这个领域的常见问题进行推测。是否可以在任何地方提供更完整的代码示例?你能用一个相当简单的例子代码重现这个问题吗?我想最后一个问题是,如果你直接使用'firebase.auth()。currentUser'(或者通过变量等来保存它),或者如果这只是简化/伪代码,你正在做的更复杂码。 –

+0

登录后,我重定向到另一个组件(我正在使用ReactJS),其中我需要查询用户节点以检索有关用户的一些信息。我试图做的查询的一个例子是'firebase.database()。ref('notifications/pending /'+ firebase.auth()。currentUser.uid +'/'+ key) .once('value ') 。然后(通知=> { //设置通知的数量 });' –