Skip to content

Commit 8fa5588

Browse files
committed
08-Session Handling with Firebase/React
1 parent 5cef762 commit 8fa5588

File tree

2 files changed

+89
-47
lines changed

2 files changed

+89
-47
lines changed

src/components/App/index.js

+59-24
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, { Component } from 'react';
22
import { BrowserRouter as Router, Route } from 'react-router-dom';
33

44
import Navigation from '../Navigation';
@@ -11,27 +11,62 @@ import AccountPage from '../Account';
1111
import AdminPage from '../Admin';
1212

1313
import * as ROUTES from '../../constants/routes';
14+
import { withFirebase } from '../Firebase';
1415

15-
const App = () => (
16-
<Router>
17-
<div>
18-
<Navigation />
19-
20-
<hr />
21-
22-
<Route exact path={ROUTES.LANDING} component={LandingPage} />
23-
<Route exact path={ROUTES.SIGN_UP} component={SignUpPage} />
24-
<Route exact path={ROUTES.SIGN_IN} component={SignInPage} />
25-
<Route
26-
exact
27-
path={ROUTES.PASSWORD_FORGET}
28-
component={PasswordForgetPage}
29-
/>
30-
<Route exact path={ROUTES.HOME} component={HomePage} />
31-
<Route exact path={ROUTES.ACCOUNT} component={AccountPage} />
32-
<Route exact path={ROUTES.ADMIN} component={AdminPage} />
33-
</div>
34-
</Router>
35-
);
36-
37-
export default App;
16+
class App extends Component {
17+
constructor(props) {
18+
super(props);
19+
20+
this.state = {
21+
authUser: null,
22+
};
23+
}
24+
25+
componentDidMount() {
26+
this.listener = this.props.firebase.auth.onAuthStateChanged(
27+
authUser => {
28+
authUser
29+
? this.setState({ authUser })
30+
: this.setState({ authUser: null });
31+
},
32+
);
33+
}
34+
35+
componentWillUnmount() {
36+
this.listener();
37+
}
38+
39+
render() {
40+
return (
41+
<Router>
42+
<div>
43+
<Navigation authUser={this.state.authUser} />
44+
45+
<hr />
46+
47+
<Route
48+
exact
49+
path={ROUTES.LANDING}
50+
component={LandingPage}
51+
/>
52+
<Route exact path={ROUTES.SIGN_UP} component={SignUpPage} />
53+
<Route exact path={ROUTES.SIGN_IN} component={SignInPage} />
54+
<Route
55+
exact
56+
path={ROUTES.PASSWORD_FORGET}
57+
component={PasswordForgetPage}
58+
/>
59+
<Route exact path={ROUTES.HOME} component={HomePage} />
60+
<Route
61+
exact
62+
path={ROUTES.ACCOUNT}
63+
component={AccountPage}
64+
/>
65+
<Route exact path={ROUTES.ADMIN} component={AdminPage} />
66+
</div>
67+
</Router>
68+
);
69+
}
70+
}
71+
72+
export default withFirebase(App);

src/components/Navigation/index.js

+30-23
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,36 @@ import { Link } from 'react-router-dom';
44
import SignOutButton from '../SignOut';
55
import * as ROUTES from '../../constants/routes';
66

7-
const Navigation = () => (
8-
<div>
9-
<ul>
10-
<li>
11-
<Link to={ROUTES.SIGN_IN}>Sign In</Link>
12-
</li>
13-
<li>
14-
<Link to={ROUTES.LANDING}>Landing</Link>
15-
</li>
16-
<li>
17-
<Link to={ROUTES.HOME}>Home</Link>
18-
</li>
19-
<li>
20-
<Link to={ROUTES.ACCOUNT}>Account</Link>
21-
</li>
22-
<li>
23-
<Link to={ROUTES.ADMIN}>Admin</Link>
24-
</li>
25-
<li>
26-
<SignOutButton />
27-
</li>
28-
</ul>
29-
</div>
7+
const Navigation = ({ authUser }) => (
8+
<div>{authUser ? <NavigationAuth /> : <NavigationNonAuth />}</div>
9+
);
10+
11+
const NavigationAuth = () => (
12+
<ul>
13+
<li>
14+
<Link to={ROUTES.LANDING}>Landing</Link>
15+
</li>
16+
<li>
17+
<Link to={ROUTES.HOME}>Home</Link>
18+
</li>
19+
<li>
20+
<Link to={ROUTES.ACCOUNT}>Account</Link>
21+
</li>
22+
<li>
23+
<SignOutButton />
24+
</li>
25+
</ul>
26+
);
27+
28+
const NavigationNonAuth = () => (
29+
<ul>
30+
<li>
31+
<Link to={ROUTES.LANDING}>Landing</Link>
32+
</li>
33+
<li>
34+
<Link to={ROUTES.SIGN_IN}>Sign In</Link>
35+
</li>
36+
</ul>
3037
);
3138

3239
export default Navigation;

0 commit comments

Comments
 (0)