Pular para conteúdo

06 RouterGuards

Router Guards#

Os Router Guards são mecanismos utilizados para garantir que o acesso a determinadas rotas em uma aplicação ocorra apenas quando certas condições são satisfeitas. Essas condições podem incluir a autenticação do usuário, nível de acesso, permissões, entre outros.

No React, é possível implementar Router Guards por meio de bibliotecas de roteamento, como o React Router. Essas bibliotecas fornecem mecanismos para definir funções de validação que serão executadas antes de renderizar uma determinada rota. Se a validação não for bem-sucedida, a rota não será renderizada e o usuário será redirecionado para outra página.

  import { BrowserRouter, Routes, Route, Navigate } from 'react-router-dom';

  function App() {
    const isAuthenticated = false;

    function PrivateRoute({ element: Component, ...rest }) {
      return (
        <Route
          {...rest}
          element={isAuthenticated ? (
            <Component />
          ) : (
            <Navigate to="/login" replace />
          )}
        />
      );
    }

    return (
      <BrowserRouter>
        <Routes>
          <Route path="/login" element={<LoginPage />} />
          <PrivateRoute path="/" element={<HomePage />} />
        </Routes>
      </BrowserRouter>
    );
  }

Neste exemplo, definimos a função PrivateRoute que recebe o componente que deve ser renderizado como elemento (element) e outras propriedades para a rota. Dentro desta função, usamos o elemento ternário para validar se o usuário está autenticado.

Se o usuário estiver autenticado, o componente filho é renderizado. Caso contrário, o usuário é redirecionado para a página de login usando o elemento Navigate com a propriedade to definida para "/login" e a propriedade replace definida como true.

Em seguida, usamos a função PrivateRoute para renderizar a página inicial (<HomePage />) somente se o usuário estiver autenticado. Se o usuário não estiver autenticado, ele será redirecionado para a página de login.