Nós iremos começar pela nossa “home.tsx”. Vamos começar criando um router e criando um estado de loading, que vai começar como verdadeiro.
const router = useRouter();
const [loading, setLoading] = useState(true);
Em seguida iremos criar um useEffect, que vai verificar se o usuário tem o token, se ele não tiver, vai ser redirecionado para login, e se tiver, nós vamos deixar o loading como falso.
useEffect(() => {
if (!sessionStorage.getItem("onebitflix-token")) {
router.push("/login");
} else {
setLoading(false);
}
}, []);
Agora iremos fazer uma verificação: Se o loading for verdadeiro, nós iremos retornar a página do spinner, e com isso não vai aparecer nada da nossa página normal.
if (loading) {
return <PageSpinner />;
}
Dessa forma, você pode logar e tentar acessar a “/home”, verá que vai carregar esse spinner e você será enviado para login.
Agora podemos copiar tudo isso e colocar em todas as páginas. Só que, você sempre tem que colocar o if antes do return e colocar esse useEffect logo depois dos useState.
const router = useRouter();
const [loading, setLoading] = useState(true);
useEffect(() => {
if (!isAuthenticated) {
router.push("/login");
} else {
setLoading(false);
}
}, []);
if (loading) {
return <PageSpinner />;
}
Vamos agora em “search.tsx”
const router = useRouter();
const [loading, setLoading] = useState(true);
useEffect(() => {
if (!isAuthenticated) {
router.push("/login");
} else {
setLoading(false);
}
}, []);
if (loading) {
return <PageSpinner />;
}
Por último, vamos em “courses” e em seguida no arquivo de “episodes” colocar isso também.
const router = useRouter();
const [loading, setLoading] = useState(true);
useEffect(() => {
if (!isAuthenticated) {
router.push("/login");
} else {
setLoading(false);
}
}, []);
if (loading) {
return <PageSpinner />;
}
Agora, apenas pessoas logadas podem ver toda a nossa aplicação.