Я создал приватный компонент, который рендерит приватные компоненты методом рендеринга, поэтому я создал 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'})
}
}