Para resolver el segundo reto utilizando location lo que debemos hacer (o al menos eso entendí) es:
- Dentro de nuestro <AuthRoute> llamar al useNavigate
const location = useLocation();
como AuthRoute envuelve a nuestras rutas protegidas location.pathname tomara el valor de la ruta a la que intentamos entrar antes del redirect a LoginPage.
- Lo siguiente es guardar este valor dentro de la propiedad state
Navigate to='/login' state={{ from: location }} replace />
Debemos colocar el atributo replace el cual nos permitirá hacer el redirect.
- Ahora debemos modificar nuestro método login dentro del AuthProvider para ello debemos llamar al hook useLocation tal como en el paso uno y crear una variable from que nos ayudara a apuntar al valor guardado en location del AuthRoute
let from = location.state?.from?.pathname || -1;
aqui le decimos que from es de existir (solo existe este valor si fuimos redirigiros desde una ruta protegida) igual al valor guardado en el Navigate del AuthRoute sino sera igual a la ultima ruta no protegida en la que estuvo el usuario (en el ejemplo del recurso se establece que sea siempre el home “/”).
- ahora solo nos queda modificar el método navigate para que nos rediría a la dirección del from en lugar de profile.
navigate(from, { replace: true })
notese que como segundo parametro pasamos el replace a true.
esto nos ayuda a que no nos rediría al perfil como establece el método login de LoginPage sino que nos lleve a la ruta del from de nuestro AuthProvider.
Si hay algo de lo que haya escrito que este errado por favor déjamelo saber con tu comentario igual si te fue de ayuda.
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?