Я пытаюсь защитить свои маршруты в ReactJS.
На каждом защищенном маршруте я хочу проверить, хорош ли пользователь, сохраненный в localStorage.
Ниже вы можете увидеть мой файл маршрутов (app.js):
class App extends Component {
render() {
return (
<div>
<Header />
<Switch>
<Route exact path="/" component={Home} />
<Route path="/login" component={Login} />
<Route path="/signup" component={SignUp} />
<Route path="/contact" component={Contact} />
<ProtectedRoute exac path="/user" component={Profile} />
<ProtectedRoute path="/user/person" component={SignUpPerson} />
<Route component={NotFound} />
</Switch>
<Footer />
</div>
);
}
}
Мой защищенный файл:
const ProtectedRoute = ({ component: Component, ...rest }) => (
<Route {...rest} render={props => (
AuthService.isRightUser() ? (
<Component {...props} />
) : (
<Redirect to={{
pathname: '/login',
state: { from: props.location }
}}/>
)
)} />
);
export default ProtectedRoute;
И моя функция isRightUser
. Эта функция отправляет status(401)
, когда данные не действительны для зарегистрированного пользователя:
async isRightUser() {
var result = true;
//get token user saved in localStorage
const userAuth = this.get();
if (userAuth) {
await axios.get('/api/users/user', {
headers: { Authorization: userAuth }
}).catch(err => {
if (!err.response.data.auth) {
//Clear localStorage
//this.clear();
}
result = false;
});
}
return result;
}
Этот код не работает, и я действительно не знаю, почему.
Может быть, мне нужно вызвать мою функцию AuthService.isRightUser()
с await
перед вызовом и поставить мою функцию асинхронной?
Как я могу обновить свой код для проверки моего пользователя перед доступом к защищенной странице?