В основном я работаю с бэкэндом, так что мой javascript - это еще не все, но у меня проблема в админ-панели, которую я разрабатываю.Некоторые части сайта могут быть доступны только определенным пользователям.
Каждый раз, когда защищенный компонент должен загружаться, я отправляю запрос на свой REST-сервер, который возвращает либо 200, либо 403, ответ 200 содержит ключ с именем redirect
, который равен False
.Поэтому я подумал о том, чтобы сделать следующее:
...
import { Redirect } from 'react-router-dom';
import axios from 'axios';
class MyProtectedComponent extends Component {
constructor(props) {
super(props);
this.state = {
authCalled: false,
redirect: true,
};
}
componentDidMount() {
console.log("mounting...")
axios.get('<https://url>',
{headers: {"Authorization": localStorage.getItem("token")}})
.then(res => {
this.setState({
redirect: res.data.data.redirect,
authCalled: true,
});
})
}
render() {
if (this.state.authCalled === false) {
return (
<div className="animated fadeIn">
<Row>
<Col>
authenticating...
</Col>
</Row>
</div>
)
}
if (this.state.redirect === true) {
return <Redirect to={{pathname: "/nonauthpage"}} />;
}
return ( ....... <main code> ..... )
Теперь, если сервер отправляет обратно 200 для доступа пользователя, компонент загружается, но если нет, страница застревает в * 1008.* фаза и никогда Redirect
с.
Весь мой javascript самоучка. Если то, что я делаю, является плохой практикой для выполнения подобных вещей, пожалуйста, дайте мне знать, как правильно это делать, или покажите мне, почему это не работает, такЯ получаю это работает.