javascript - React 应用程序中登录页面的路由保护

标签 javascript reactjs react-router react-router-dom

我正在尝试保护我的 React 应用程序中的路由。 Home 页面受到保护,但我还想在 isLoggedIn 为 true 时阻止用户返回登录页面,如果为 false 则他可以无法访问主页,并将被重定向到登录页面。 这是我编写的 PrivateRoutes 来保护正在保护家庭的路由,但用户仍然可以访问 Login 页面,我该如何阻止它?

PrivateRoutes.jsx:

import { Outlet, Navigate } from "react-router-dom";

const PrivateRoutes = () => {
  const isLoggedIn = true;
  return isLoggedIn ? <Outlet /> : <Navigate to="/login" />;
};

export default PrivateRoutes;

这是 App.jsx:

import { BrowserRouter, Route, Routes } from "react-router-dom";
import Login from "./pages/Login";
import SignUp from "./pages/SignUp";
import Home from "./pages/Home";
import PrivateRoutes from "./utils/PrivateRoutes";

function App() {
  return (
    <>
      <BrowserRouter>
        <Routes>
          <Route element={<PrivateRoutes />}>
            <Route index element={<Home />} path="/" exact />
          </Route>
          <Route path="/login" element={<Login />} />
        </Routes>
      </BrowserRouter>
    </>
  );
}

export default App;

最佳答案

如果您想阻止对 "/login" 路由进行身份验证访问,那么您还可以在与私有(private)路由类似的条件下保护该路由。创建另一个布局路由组件,该组件应用 PrivateRoute 组件的相反条件,例如它会重定向经过身份验证的用户。

示例:

import { Outlet, Navigate } from "react-router-dom";

const PrivateRoute = () => {
  const isLoggedIn = true;
  return isLoggedIn 
    ? <Outlet />
    : <Navigate to="/login" replace />;
};

export default PrivateRoute;
import { Outlet, Navigate } from "react-router-dom";

const AnonymousRoute = () => {
  const isLoggedIn = true;
  return isLoggedIn 
    ? <Navigate to="/" replace />
    : <Outlet />;
};

export default AnonymousRoute;
import { BrowserRouter, Route, Routes } from "react-router-dom";
import Login from "./pages/Login";
import SignUp from "./pages/SignUp";
import Home from "./pages/Home";
import PrivateRoute from "./utils/PrivateRoute";
import AnonymousRoute from "./utils/AnonymousRoute";

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route element={<PrivateRoute />}>
          <Route path="/" element={<Home />} />
        </Route>
        <Route element={<AnonymousRoute />}>
          <Route path="/login" element={<Login />} />
        </Route>
      </Routes>
    </BrowserRouter>
  );
}

export default App;

关于javascript - React 应用程序中登录页面的路由保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76935614/

相关文章:

javascript - 将 mysql_fetch_array 中的 php 数据保存为脚本变量

javascript - 类属性的 setter/getter (Object.assign)?

javascript - 在类上使用方法或在闭包中使用函数

javascript - 拒绝执行脚本,因为其 MIME 类型 ('application/gzip' ) 不可执行,并且启用了严格的 MIME 类型检查

javascript - React Router 将 props 传递给 <Link/> 渲染的组件?

javascript - React.js 如何从函数组件访问 Router Link URL 中的参数?

javascript - Vue 复制对象到本地数据

javascript - OAuth弹窗跨域安全React.js

javascript - 如何嵌入多个 Facebook 视频(使用 React)

javascript - 仅在页面刷新后加载 react 应用程序中的样式