【发布时间】:2019-04-19 21:36:40
【问题描述】:
为什么 React Router 在检查另一个路由的身份验证状态时会断开当前的 Firebase AuthUser?
当我在路由(家庭、帐户等)之间切换时,会调用 onDisconnect() 函数,并且状态会在每次几秒钟内从已连接到断开连接回到已连接。
路线:
const App = () => (
<Router>
<div>
<CustomNavbar />
<Switch>
<Route path={ROUTES.SIGN_UP} component={SignUpPage} />
<Route path={ROUTES.SIGN_IN} component={SignInPage} />
<Route path={ROUTES.PASSWORD_FORGET} component={PasswordForgetPage} />
<Route exact path={ROUTES.HOME} component={HomePage} />
<Route path={ROUTES.ACCOUNT} component={AccountPage} />
<Route path={ROUTES.ADMIN} component={AdminPage} />
<Route path={ROUTES.MANAGER} component={Manager} />
<Route path={ROUTES.DEFAULT_SETTINGS} component={DefaultSettings} />
<Redirect to={ROUTES.HOME} />
</Switch>
</div>
</Router>
);
export default withAuthentication(App);
验证用户监听器:
this.listener = this.props.firebase.onAuthUserListener(
authUser => {
this.setState({ authUser });
var myConnectionsRef = this.props.firebase.db.ref('users/'+authUser.uid+'/connected')
var connectedRef = this.props.firebase.db.ref('.info/connected');
connectedRef.on('value', function(snap) {
console.log(snap.val())
if(snap.val() === true){
myConnectionsRef.onDisconnect().set(false).then(() => {
myConnectionsRef.set(true);
})
}
});
});
【问题讨论】:
-
你能把所有相关代码贴在这里吗?
-
我不确定如何在不添加大量代码的情况下准确显示每个特定部分。希望在处理反应路由器时一般找出这是否是正常行为,或者是否应该永远be "false" 会因为路由改变而断开连接。
-
没有理由更改路由会断开您的连接,因此查看您在哪里检查身份验证状态以及您的路由是有意义的。
-
我添加了一些代码
-
如果您的服务器端断开处理程序 (
myConnectionsRef.onDisconnect().set(false)) 被调用,则服务器已失去对客户端的跟踪。如果这种情况持续发生,则实际上意味着当路由更改时,客户端和服务器之间的 Web 套接字已关闭。您可能想要检查网络流量以查看是否正在完成真正的页面转换。如果您不这么认为,您能否在 stackblitz.com 之类的网站上设置问题的重现,以便我们查看?
标签: reactjs firebase firebase-realtime-database jsx