I created a component called EnsureLoggedInContainer
which wraps around components that only a logged in user can access:
ReactDOM.render(
<Provider store={store}>
<BrowserRouter>
<div>
<Switch>
<Route path="/login" render={(props) => {
if (isAuthenticated()) {
return <Redirect to='/' />;
} else {
return <LoginForm {...props}/>
}
}
} />
<EnsureLoggedInContainer>
<Route exact path="/api/group" component={GroupList}/>
<Route component={Home}/>
</EnsureLoggedInContainer>
</Switch>
</div>
</BrowserRouter>
</Provider>
, document.querySelector('.container'));
class EnsureLoggedInContainer extends Component {
componentDidMount() {
if (!isAuthenticated()) {
const redirected_from = this.props.location.state ? this.props.location.state.from.pathname : '/';
this.props.history.push(redirected_from);
dispatch(setRedirectUrl(currentURL))
this.props.history.replace("/login")
}
}
render() {
if (isAuthenticated()) {
return(
<div>
<AppNavBar />
<ComponentsNavBar />
{this.props.children}
</div>
);
} else {
return <noscript />;
}
}
}
export default EnsureLoggedInContainer;
Right now, Home
component is always rendered. How can I make it a no-match route, such as it renders only if path doesn't match with any provided route paths ?
I added path="*"
to <Route component={Home}/>
and it still always renders.