Всем привет у меня есть такая вот проверка на авторизованность, если пользователь открывает страницу и он не авторизован то его редиректит на страницу авторизации
const CheckRoute = ({
component: Component, ...rest }) => (
<Route
{...rest}
render={props => {
const isLoggedIn = !!Cookies.get('token');
return isLoggedIn ?
(<Component {...props} />)
:
(<Redirect to={{pathname: '/login' }}/>);
}
}
/>
);
export default () => (
<Switch>
<CheckRoute path="/" exact component={Home}/>
<CheckRoute path="/users" exact component={UserList}/>
<CheckRoute path="/logout" exact component={LogOutRoute}/>
<Route path="/login" render={props => {
const isLoggedIn = !!Cookies.get('token');
return !isLoggedIn ?
(<LogIn/>)
:
(<Redirect to={{pathname: '/'}}/>);
}}/>
<Route path="/users/:id" exact component={UserDetail}/>
<Route component={NotFound}/>
</Switch>
);
Как сделать так, чтобы после авторизации он возвращался на страницу с которой пришел, т.е предыдущая куда он хотел попасть но его редиректнуло, как например через localstorage
В самой простой реализации будет выглядеть следующим образом. Предположим у нас есть корневой компонент App
, в него мы попадаем в первую очередь, объявим внутри constructor
переменную в state
и запомним наш url
с коротого мы пришли:
this.state = {
url: window.location.href,
}
Просто сохраним URL целиком в состоянии родительского компонента. При этом Route
и Redirect
не должны породить перезагрузку страницы, чтобы значение url
не перезаписалось в состоянии компонента. Напишем здесь же метод, который будет вызываться, когда пользователь войдет:
afterLogIn() {
document.location.assign(this.state.url);
}
Метод максимально простой, он загружает ресурс по URL, указанному в качестве параметра. Этот параментр мы достаем из стейта. Данный метод нужно передать в компоненту логина через props
и вызвать после успешного входа пользователя. Чтобы редирект успешно отработал, должно быть полное соответсвие URL, так как у вас используется признак exact
в рутах. Это своего рода маленький костылик (в любом случае нужно сохранить URL с которого мы пришли, чтобы потом заредиректить на него).
Полезные ссылки:
react-router
- How to get previous path?P.S.: данный подход проверил в своем React приложении и всё успешно работает.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Мне нужен пошаговый визард для редактирования моделиОстановился на jQuery Steps
Есть массив с объектамиНужно проверить есть ли данное свойство объекта в массиве с объектами
Есть два массива с объектамиНужно сверить если элементы первого массива есть во втором