1- import React from "react" ;
2- import { Link } from "react-router-dom" ;
1+ import React , { useState , useEffect } from "react" ;
2+ import { Auth } from "aws-amplify" ;
3+ import { Link , withRouter } from "react-router-dom" ;
34import { Nav , Navbar , NavItem } from "react-bootstrap" ;
45import { LinkContainer } from "react-router-bootstrap" ;
56import Routes from "./Routes" ;
67import "./App.css" ;
78
89function App ( ) {
10+ const [ isAuthenticating , setIsAuthenticating ] = useState ( true ) ;
11+ const [ isAuthenticated , userHasAuthenticated ] = useState ( false ) ;
12+
13+ useEffect ( ( ) => {
14+ onLoad ( ) ;
15+ } , [ ] ) ;
16+
17+ async function onLoad ( ) {
18+ try {
19+ await Auth . currentSession ( ) ;
20+ userHasAuthenticated ( true ) ;
21+ }
22+ catch ( e ) {
23+ if ( e !== 'No current user' ) {
24+ alert ( e ) ;
25+ }
26+ }
27+
28+ setIsAuthenticating ( false ) ;
29+ }
30+
31+ async function handleLogout ( ) {
32+ await Auth . signOut ( ) ;
33+
34+ userHasAuthenticated ( false ) ;
35+
36+ props . history . push ( "/login" ) ;
37+ }
38+
939 return (
40+ ! isAuthenticating &&
1041 < div className = "App container" >
1142 < Navbar fluid collapseOnSelect >
1243 < Navbar . Header >
@@ -17,18 +48,23 @@ function App() {
1748 </ Navbar . Header >
1849 < Navbar . Collapse >
1950 < Nav pullRight >
20- < LinkContainer to = "/signup" >
21- < NavItem > Signup</ NavItem >
22- </ LinkContainer >
23- < LinkContainer to = "/login" >
24- < NavItem > Login</ NavItem >
25- </ LinkContainer >
51+ { isAuthenticated
52+ ? < NavItem onClick = { handleLogout } > Logout</ NavItem >
53+ : < >
54+ < LinkContainer to = "/signup" >
55+ < NavItem > Signup</ NavItem >
56+ </ LinkContainer >
57+ < LinkContainer to = "/login" >
58+ < NavItem > Login</ NavItem >
59+ </ LinkContainer >
60+ </ >
61+ }
2662 </ Nav >
2763 </ Navbar . Collapse >
2864 </ Navbar >
29- < Routes />
65+ < Routes appProps = { { isAuthenticated , userHasAuthenticated } } />
3066 </ div >
3167 ) ;
3268}
3369
34- export default App ;
70+ export default withRouter ( App ) ;
0 commit comments