I've created a middleware that checks if a request returns an invalid access response. If the status is a 401, I want to redirect the user to the login page
Here's the middleware code
import React from 'react';
import { push, replace } from 'react-router-redux';
const auth_check = ({ getState }) => {
return (next) => (action) => {
if(action.payload != undefined && action.payload.status==401){
push('login');
console.log('session expired');
}
// Call the next dispatch method in the middleware chain.
let returnValue = next(action);
return returnValue
}
}
export default auth_check;
Including it in index.js
...
const store = createStore(reducers, undefined,
compose(
applyMiddleware(promise,auth_check)
)
);
const history = syncHistoryWithStore(browserHistory, store);
ReactDOM.render(
<Provider store={store}>
<Router history={history} routes={routes} />
</Provider>
, document.querySelector('.app'));
The push method does not redirect the page. I am sure that the code goes through that section since the log is showing
use
onEnter
method of react-router. call a function which will check for the access. Example:if you prefer Redux style actions, the library also provides a set of action creators and a middleware to capture them and redirect them to your history instance.
for:
push(location), replace(location), go(number), goBack(), goForward()
You must install routerMiddleware for these action creators to work.
Also React Router provides singleton versions of history (browserHistory and hashHistory) that you can import and use from anywhere in your application.
btw for check auth you may use onEnter or redux-auth-wrapper