How do I check for token expiration and logout user?

后端 未结 3 1097
傲寒
傲寒 2020-12-24 12:46

The user can logout himself when he/she clicks on the logout button but if the token is expired he/she cant logout because in my application, the token is used in both serve

相关标签:
3条回答
  • 2020-12-24 13:03

    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

    0 讨论(0)
  • 2020-12-24 13:07

    this.serverResponse.expires_inis 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.

    0 讨论(0)
  • 2020-12-24 13:16

    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);
    
    0 讨论(0)
提交回复
热议问题