У меня есть файл с именем AuthenticatedRoute.tsx
, который используется в моем файле Router.tsx
в качестве шаблона для всех моих защищенных / аутентифицированных маршрутов.
export default ({ component: C, authUser: A, path: P, exact: E }:
{ component, authUser, path, exact }) => (
<Route
exact={E}
path={P}
render={props =>
getRender(A, P, props, C)
}
/>
);
Функция getRender
выполняет следующее:
const getRender = (user, path, props, C) => {
if (user) {
if (!user.country) {
return <Redirect to={'/select-country'} />;
} else if (!user.phoneNumber) {
return <Redirect to={'/add-phone'} />;
} else if (!user.phoneNumberVerified) {
return <Redirect to={'/verify-phone'} />;
} else if (path === '/select-country' || path === '/add-phone' || path === '/verify-phone') {
return <Redirect to={'/dashboard'} />;
} else {
return <C {...props} authUser={user} />;
}
} else {
return <Redirect to={'/signin'} />;
}
};
Все вышеописанное пытается перенаправить пользователя на другой маршрут, если его профиль не завершен.
- Если у пользователя нет страны, перенаправьте его на страницу выбора страны.
- Если у пользователя нет номера телефона, перенаправьте его на страницу добавления номера телефона.
- Если номер телефона пользователя не подтвержден, перенаправьте его на страницу подтверждения номера телефона.
- Если пользователь находится на любом из вышеперечисленных маршрутов и уже имеет эти данные, перенаправьте его на панель управления.
- Наконец, если правила не были соблюдены, просто визуализируйте компонент / маршрут, который они пытались получить.
Проблема, возникающая здесь, заключается в том, что, если пользователь пытается перейти в выбранную страну или добавить телефонные маршруты, появляется консольная ошибка:
Warning: You tried to redirect to the same route you're currently on: "/select-country"
Я попытался добавить больше логики, например:
if (!user.country && path !== '/select-country') {
return <Redirect to={'/select-country'} />;
}
Хотя я получаю бесконечное перенаправление:
Error: Maximum update depth exceeded.
Как я могу решить проблему перенаправления на эти маршруты, когда пользователь не полностью заполнил свой профиль?