亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何防止某些用戶訪問 React 中的路由和任何子路由?

如何防止某些用戶訪問 React 中的路由和任何子路由?

千萬里不及你 2022-01-07 19:23:05
防止特定用戶訪問路由及其任何子路由的最佳方法是react-router什么?例如,我有一個途徑/admin/,它有許多其他的子路徑一樣/admin/create-user,/admin/settings等等。是否有另一種方法可以阻止用戶訪問這些路由而不在每個組件上指示某些條件?if (user.role.name !== "Admin") {    return (      <div className="error-page">        <h1>Sorry, you don't have rights to access this page.</h1>     </div>    );  } else {  // render admin component}
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

您需要使用自定義的 ProtectedRoute 組件,并將所需的角色傳遞給此組件,無論用戶是否可以轉到該路由。


代碼沙盒:


https://codesandbox.io/s/so-protect-route-roles-z7j3l


ProtectedRoute.js:


import React from "react";

import { Route, Redirect } from "react-router-dom";

import {user} from "./AuthService";


export const ProtectedRoute = ({

  path,

  component: Component,

  render,

  requiredRole,

  ...rest

}) => {


  return (

    <Route

      path={path}

      {...rest}

      render={props => {

        if (user.role.name === requiredRole) {

          return Component ? <Component {...props} /> : render(props);

        } else {

          return <Redirect to="/error" />;

        }

      }}

    />

  );

};


export default ProtectedRoute;

AuthService 就是這樣,您需要對其進行修改以滿足您的要求。


AuthService.js(您可以將角色更改為管理員,以使用它)


export const user = {

  name: "User 1",

  role:{

    name: "User"

  }

}

App.js(請注意,我們使用了 ProtectedRoute 組件,并將所需的角色傳遞給它)


import React, { Component } from "react";

import { BrowserRouter as Router, Link, Route } from "react-router-dom";

import Home from "./Home";

import User from "./User";

import Admin from "./Admin";

import Login from "./Login";

import ErrorPage from "./ErrorPage";

import ProtectedRoute from "./ProtectedRoute";


class App extends Component {

  render() {

    return (

      <Router>

        <div>

          <ul>

            <li>

              <Link to="/">Home</Link>

            </li>

            <li>

              <Link to="/user">User</Link>

            </li>

            <li>

              <Link to="/admin">Admin</Link>

            </li>

          </ul>


          <Route exact path="/" component={Home} />

          <Route exact path="/login" component={Login} />

          <Route exact path="/error" component={ErrorPage} />

          <ProtectedRoute path="/user" component={User} requiredRole="User" />

          <ProtectedRoute path="/admin" component={Admin} requiredRole="Admin" />

        </div>

      </Router>

    );

  }

}


export default App;


使用此設置,沒有管理員角色的用戶無法導航到管理員及其嵌套路由。


查看完整回答
反對 回復 2022-01-07
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

使用如圖所示的 Route 組件


if(user.role.name !== "Admin") {

   <Route path="/admin" component={Admin} />

} else {

   <Redirect to="/" />

}

如果管理員顯示組件,否則重定向到主頁。


查看完整回答
反對 回復 2022-01-07
  • 2 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號