ProtectedRoute Guardiões de Rota

Última atualização: 2026-11-03

ProtectedRoute Guardiões de Rota

Um guardião de rota verifica permissões antes que a página abra: envolva uma rota em ProtectedRoute, e quando o visitante não está logado ele redireciona para /login enquanto lembra a página de origem, para que possa ser enviado de volta após entrar. O React não traz um guardião nativo, então você o constrói a partir de renderização condicional mais Navigate ou useNavigate, e o guardião permanece um componente simples que você pode testar isoladamente.

GrupoRoteamento e Gerenciamento
TipoPadrão

ℹ️ Informação O editor transpila JSX para JavaScript e renderiza a UI real na sandbox; os componentes são montados automaticamente — sem render manual.

📝 Sintaxe

import { Navigate, Outlet } from 'react-router-dom'

function ProtectedRoute({ isAuth }) {
  if (!isAuth) {
    // Not signed in: redirect to the login page and remember where we came from
    return <Navigate to="/login" replace state={{ from: location.pathname }} />
  }
  return <Outlet />   // Signed in: render the child routes
}

// Usage:
// <Route element={<ProtectedRoute isAuth={user} />}>
//   <Route path="/admin" element={<Admin />} />
// </Route>

⚙️ Parâmetros

isAuth (custom)A verificação de permissão: um booleano, um array de papéis ou um estado assíncrono — o que sua sessão fornecer.
redirect (custom)Para onde vai um visitante rejeitado: um endereço de redirecionamento ou uma UI de aviso, desenhada conforme o projeto.

Retorna:Sem valor de retorno; trata-se de um padrão de codificação, não de uma API chamável.

▶ Exemplo

O exemplo roda direto: renderiza automaticamente ao expandir e edições valem na hora.

Saída:

Clicar em "Admin" enquanto deslogado é bloqueado e cai na página de login; clicar em "Entrar e voltar" entra no painel administrativo — o fluxo de guardião de um redirecionamento Navigate mais o retorno após entrar (demonstração simulada).

💡 Pontos-chave

⚠️ Aviso Um guardião de front-end é apenas uma camada de experiência: assets estáticos e APIs continuam diretamente acessíveis, então o servidor precisa verificar as permissões novamente para cada dado sensível.
💡 Dica Armazene a página de origem no state durante o redirecionamento (from: location.pathname) e volte com precisão usando navigate(state.from ?? '/home') após entrar.
ℹ️ Informação Quando a permissão vem de uma requisição assíncrona (um endpoint /me), mostre um estado de carregamento no guardião primeiro e só então deixe o visitante passar, para que a página de login não apareça em um flash.
Mais casos em breve.

📚 Tutoriais Relacionados

❓ Perguntas Frequentes

P Como o componente Navigate difere de useNavigate?
R O Navigate redireciona assim que é renderizado, o que cabe em ramificações declarativas no JSX, enquanto useNavigate é uma função imperativa para callbacks de evento. Ambos acabam fazendo a mesma coisa por baixo.
P Como volto para a página que o visitante queria?
R Armazene state={{ from: location.pathname }} antes de redirecionar e então chame navigate(location.state?.from ?? '/home') após um login bem-sucedido.
P Como estendo isso para permissões por papel (admin/vip)?
R Troque isAuth por uma verificação de papel: teste allowedRoles.includes(user.role) dentro do guardião e envolva-o em um componente RoleRoute para poder reutilizá-lo.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%