App.js
class App extends Component {
constructor(props) {
super(props);
this.state = {
user: {},
}
}
render() {
return (
<BrowserRouter>
<div style={{background:'floralwhite'}}>
<Route path='/' component={Home} />
<Route path='/calendar' component={Calendar} />
<Route path='/config' component={UserConfig} />
<Route path='/login' component={Login} />
</div>
</BrowserRouter>
);
}
}
我正在使用react-router-dom
Route
在我的Web应用程序中创建不同的路径。然后在我的navbar
中使用这些路径,呈现如下:
render() {
return(
<div className="navbar">
<div className="logo-container">
<img src={Logo}></img>
</div>
<div className="left-link-container">
</div>
<div className="right-link-container">
<span style={{color:'white'}} onClick={this.handleLogout}>Sign Out</span>
<Link style={{ textDecoration: 'none' }} to="/config"><span style={{color:'white', marginRight:'2em'}}>Configuration</span></Link>
<Link style={{ textDecoration: 'none' }} to="/calendar"><span style={{color:'white', marginRight:'2em'}}>Calendar</span></Link>
</div>
</div>
);
}
因此,单击日历将使我进入/calendar
路径。没问题,一切都按预期进行。但是,当我在/calendar
页面上刷新时,它将以某种方式从我的Firebase身份验证中注销。
我的身份验证在我的Home
组件中进行,如下所示:
class Home extends Component {
constructor(props) {
super(props);
this.state = {
user: {},
}
}
componentDidMount() {
this.authListener();
}
authListener() {
fire.auth().onAuthStateChanged((user) => {
console.log(user);
if (user) {
this.setState({ user });
localStorage.setItem('user', user.uid);
} else {
this.setState({ user: null });
localStorage.removeItem('user')
}
});
}
render() {
return (
<div className="App">
{this.state.user ? (
<div>
<Navbar />
</div>) :
(<Login />)}
</div>
)
};
我确实有条件地渲染组件,并在用户未登录时将其引导至“登录”页面。当我从App.js
中定义的其他路径刷新时,它将自动注销用户。我需要解决此问题,因为我使用fire.auth().currentUser.uid
来获取用户在其他路径不同的组件中的uid。
有帮助吗?
答案 0 :(得分:0)
检查以下页面。
我认为使用React HOOKS更好。
Firebase + React HOOKS身份验证教程
https://www.youtube.com/watch?v=K_wZCW6wXIo
React初学者教程中的Firebase [2019]
https://www.robinwieruch.de/complete-firebase-authentication-react-tutorial/#firebase-authentication