fix issue with authentication redirect loop
This commit is contained in:
		| @@ -1,4 +1,5 @@ | ||||
| import React, { Component } from 'react'; | ||||
| import { Redirect, Route, Switch } from 'react-router'; | ||||
|  | ||||
| import AppRouting from './AppRouting'; | ||||
| import SnackbarNotification from './components/SnackbarNotification'; | ||||
| @@ -33,19 +34,25 @@ const theme = createMuiTheme({ | ||||
| // JSS instance | ||||
| const jss = create(jssPreset()); | ||||
|  | ||||
| class App extends Component { | ||||
| 	render() { | ||||
| 	   return ( | ||||
| 		 <StylesProvider jss={jss}> | ||||
| 			<MuiThemeProvider theme={theme}> | ||||
|         <SnackbarNotification> | ||||
| 				  <CssBaseline /> | ||||
|           <AppRouting /> | ||||
|         </SnackbarNotification> | ||||
| 			</MuiThemeProvider> | ||||
| 		 </StylesProvider> | ||||
| 		) | ||||
| 	} | ||||
| // this redirect forces a call to authenticationContext.refresh() which invalidates the JWT if it is invalid. | ||||
| const unauthorizedRedirect = () =>  <Redirect to="/" />; | ||||
|  | ||||
| class App extends Component {   | ||||
|   render() { | ||||
|     return ( | ||||
|       <StylesProvider jss={jss}> | ||||
|         <MuiThemeProvider theme={theme}> | ||||
|           <SnackbarNotification> | ||||
|             <CssBaseline /> | ||||
|             <Switch> | ||||
|               <Route exact path="/unauthorized" component={unauthorizedRedirect} /> | ||||
|               <Route component={AppRouting} /> | ||||
|             </Switch> | ||||
|           </SnackbarNotification> | ||||
|         </MuiThemeProvider> | ||||
|       </StylesProvider> | ||||
|     ); | ||||
|   } | ||||
| } | ||||
|  | ||||
| export default App | ||||
|   | ||||
| @@ -47,7 +47,7 @@ export function redirectingAuthorizedFetch(url, params) { | ||||
|   return new Promise(function (resolve, reject) { | ||||
|     authorizedFetch(url, params).then(response => { | ||||
|       if (response.status === 401) { | ||||
|         history.push("/");         | ||||
|         history.push("/unauthorized");         | ||||
|       } else { | ||||
|         resolve(response); | ||||
|       } | ||||
|   | ||||
| @@ -89,11 +89,11 @@ class AuthenticationWrapper extends React.Component { | ||||
|  | ||||
|   signIn = (accessToken) => { | ||||
|     try { | ||||
|       this.setState({ context: { ...this.state.context, user: jwtDecode(accessToken) } }); | ||||
|       localStorage.setItem(ACCESS_TOKEN, accessToken); | ||||
|       this.setState({ context: { ...this.state.context, user: jwtDecode(accessToken) } }); | ||||
|     } catch (err) { | ||||
|       this.setState({ initialized: true, context: { ...this.state.context, user: undefined } }); | ||||
|       this.props.raiseNotification("Failed to parse JWT " + err.message); | ||||
|       throw new Error("Failed to parse JWT " + err.message); | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   | ||||
| @@ -44,9 +44,9 @@ const styles = theme => { | ||||
|     } | ||||
|   } | ||||
| } | ||||
|   | ||||
|  | ||||
| class LoginPage extends Component { | ||||
|  | ||||
| class SignInPage extends Component { | ||||
|  | ||||
|   constructor(props) { | ||||
|     super(props); | ||||
| @@ -82,7 +82,6 @@ class LoginPage extends Component { | ||||
|         } | ||||
|       }).then(json => { | ||||
|         authenticationContext.signIn(json.access_token); | ||||
|         this.setState({ processing: false }); | ||||
|       }) | ||||
|       .catch(error => { | ||||
|         this.props.raiseNotification(error.message); | ||||
| @@ -132,4 +131,6 @@ class LoginPage extends Component { | ||||
|  | ||||
| } | ||||
|  | ||||
| export default withAuthenticationContext(withNotifier(withStyles(styles)(LoginPage))); | ||||
| export default withAuthenticationContext( | ||||
|   withNotifier(withStyles(styles)(SignInPage)) | ||||
| ); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user