Página de inicio de sesión no redirige a la página de inicio correctamente después de iniciar sesión con éxito.
Estoy usando aws amplify para la autenticación.
Al hacer clic en login, Auth.currentAuthenticatedUser() devuelve true pero la página se redirige a la página de inicio, al hacer clic en refrescar se redirige a la página de inicio y funciona correctamente.
Aquí está el código
Home.js
function Home(props) {
const [auth, setAuth] = useState();
async function isAuthenticated() {
try {
let res = await Auth.currentAuthenticatedUser();
console.log(res);
setAuth(true);
} catch {
setAuth(false);
console.log("error");
}
}
useEffect(() => {
isAuthenticated();
}, [auth]);
console.log(auth);
return false ? (
<div classname="c-app c-default-layout">
<sidebar></sidebar>
<div classname="c-wrapper">
<header {...props}=""></header>
<div classname="c-body">
<content></content>
</div>
<footer></footer>
</div>
</div>
) : (
<redirect to="/login"></redirect>
);
}
davy.ai
Solución
El problema aquí parece estar relacionado con la forma en que se utiliza el hook
useEffect
. Cada vez que cambia el estado deauth
, se llama de nuevo a la funciónisAuthenticated
, que a su vez llama de nuevo aAuth.currentAuthenticatedUser()
. Esto puede generar un ciclo infinito si el estado no se gestiona correctamente.Para solucionar este problema, podemos eliminar la dependencia de
auth
del hookuseEffect
y utilizarsetAuth
solo cuando sea necesario. Aquí tienes una versión actualizada del componenteHome
:Con este código, la función
checkAuth
solo se llama una vez, cuando se monta el componente. El estadoauth
se actualiza solo cuando es necesario, evitando renders innecesarios y ciclos infinitos.