Route Guards 是指根據特定條件或標準(例如使用者驗證、角色、權限甚至資料可用性)限製或允許存取某些路由的機制。這是具有私有或受保護路由的應用程式(例如管理儀表板、使用者設定檔或其他敏感區域)中的常見要求。
路由防護透過將未經授權的使用者重新導向到另一個頁面或在嘗試存取不允許他們查看的路由時顯示錯誤訊息來防止未經授權的使用者存取受限路由。
在 React 中,可以透過利用 React Router 結合自訂邏輯(例如驗證狀態或基於角色的存取控制)來實現路由保護。
讓我們看看如何使用 React Router 和基本的身份驗證防護來實現路由防護。我們將檢查使用者是否經過身份驗證,並根據該情況有條件地渲染路由。
在此範例中,我們將使用路由防護來檢查使用者是否經過身份驗證,然後才允許存取 /dashboard 等受限制的路由。
我們將建立一個 PrivateRoute 元件,用於檢查使用者是否經過身份驗證,並允許存取受保護的路由或將其重新導向到登入頁面。
import React from 'react'; import { Route, Navigate } from 'react-router-dom'; // PrivateRoute component for protecting routes const PrivateRoute = ({ element, isAuthenticated, ...rest }) => { return ( <Route {...rest} element={isAuthenticated ? element : <Navigate to="/login" />} /> ); }; export default PrivateRoute;
現在,讓我們設定主應用程序,在其中使用 PrivateRoute 來保護某些路由,例如 /dashboard。
import React from 'react'; import { Route, Navigate } from 'react-router-dom'; // PrivateRoute component for protecting routes const PrivateRoute = ({ element, isAuthenticated, ...rest }) => { return ( <Route {...rest} element={isAuthenticated ? element : <Navigate to="/login" />} /> ); }; export default PrivateRoute;
在此範例中,我們將實現一個路由防護,僅當使用者俱有管理員角色時才允許存取 /admin 路由。
我們將修改 PrivateRoute 元件以處理身份驗證和基於角色的存取。
import React, { useState } from 'react'; import { BrowserRouter, Routes, Route, Link } from 'react-router-dom'; import PrivateRoute from './PrivateRoute'; // Import the route guard // Simple page components const Home = () => <h2>Home Page</h2>; const Login = () => <h2>Login Page</h2>; const Dashboard = () => <h2>Dashboard (Private)</h2>; const App = () => { const [isAuthenticated, setIsAuthenticated] = useState(false); // Authentication state return ( <BrowserRouter> <nav> <ul> <li><Link to="/">Home</Link></li> <li><Link to="/login">Login</Link></li> <li><Link to="/dashboard">Dashboard</Link></li> </ul> </nav> <Routes> <Route path="/" element={<Home />} /> <Route path="/login" element={<Login />} /> {/* Protected route using PrivateRoute */} <PrivateRoute path="/dashboard" isAuthenticated={isAuthenticated} element={<Dashboard />} /> </Routes> <div> {/* Toggle authentication state */} <button onClick={() => setIsAuthenticated(!isAuthenticated)}> {isAuthenticated ? "Logout" : "Login"} </button> </div> </BrowserRouter> ); }; export default App;
在主應用程式中,我們將設定一個基於角色的路由防護,僅當使用者是管理員時才允許存取 /admin 路由。
import React from 'react'; import { Route, Navigate } from 'react-router-dom'; // Role-based Route Guard const RoleBasedRoute = ({ element, isAuthenticated, userRole, requiredRole, ...rest }) => { return ( <Route {...rest} element={ isAuthenticated && userRole === requiredRole ? element : <Navigate to="/login" /> } /> ); }; export default RoleBasedRoute;
路由防護是一項重要功能,用於根據身份驗證和使用者角色等條件控制對應用程式特定部分的存取。它們透過確保只有授權使用者才能存取某些路由來幫助提高應用程式的安全性和功能。 React Router 透過使用條件渲染、用於重定向的 Navigate 元件以及處理複雜邏輯的自訂元件,可以輕鬆實現路由保護。
以上是在 React 中實現 Route Guards:透過身份驗證和角色保護您的路由的詳細內容。更多資訊請關注PHP中文網其他相關文章!