где поставить проверочный токен api в Private Route Component - PullRequest
0 голосов
/ 05 февраля 2019

Я создал приватный компонент, который рендерит приватные компоненты методом рендеринга, поэтому я создал API в экспрессе, который имеет промежуточное ПО для проверки токена, поэтому я пытаюсь сделать запрос checkToken в ComponentDidMount, и он работает, но неt изменить состояние, чтобы отобразить желаемый компонент

аутентификация истинна, если в localStorage есть токен

class PrivateRoute extends Component {
  state = {auth2: false};
  componentDidMount() {
   axios.get('/checkToken')
   .then(res => {
     if (res.status === 200) {
       this.setState({ auth2 : true})
     } else if(res.status === 401) {
            // debugger         
     }})
   .catch(err => {
    // this.setState({ auth2: false });
    });
    }
 render() {
   const {component: Component, auth, ...rest} = this.props;
   return (
    <Route {...rest} render={props => (
     this.state.auth2 && auth
     ? <Component {...props} />
     : <Redirect to={{
        pathname: '/signin',
        state: {from: props.location }
       }} />
     )}/>
    )
  }
} 

вот контрольный маркер API бэкэнда

app.get('/checkToken', auth.loginRequired, (req, res) => {
  res.status(200).json({auth: true});
});

exports.loginRequired = function(req,res,next) {
  try {
   let token = req.headers.authorization.split(' ')[1]; 
   jwt.verify(token,process.env.SECRET_KEY,function(err,decoded){
    if(decoded){
     next();
    } else {
     res.status(401).json({message: 'You must login before'})
    }
    });
   } catch(err) {
     res.status(401).json({message: 'You must login before'})
   }
}


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...