How do I check for token expiration and logout user?
In my view middleware will be the best option.
You can do something like this
const checkTokenExpirationMiddleware = store => next => action => { const token = JSON.parse(localStorage.getItem("user")) && JSON.parse(localStorage.getItem("user"))["token"]; if (jwtDecode(token).exp < Date.now() / 1000) { next(action); localStorage.clear(); } next(action);};
You have to then wrap it in applyMiddleware
You need to wrap the Main component with a HOC. The HOC will validate the token and if OK allow the component to display. If the token is invalid, the login page is redirected to.
const authChecker = (Component) => { return class extends React.Component { state = { show: false; } componentWillReceiveProps(nextProps) { if (nextProps.children !== this.props.children) { this.checkAuth(); } } componentDidMount() { this.checkAuth(); } checkAuth() { Api.checkAuth() .then(result => { if (result.success) { this.setState({ show: true }); } else { // logout since token expired API.logout(); } }); } render() { return this.state.show && <Component {...this.props} /> } }}export default authChecker(Main);
this.serverResponse.expires_in
is the expiration time in seconds.
var tokenexpiration: Date = new Date();tokenexpiration.setSeconds(new Date().getSeconds() + parseInt(this.serverResponse.expires_in))console.log(tokenexpiration);
than you can save it to localStorage:
localStorage.setItem('expirationdate',tokenexpiration)
and with simple condition you can check whenever you need if the token was expired.