react 路由鉴权

权限路由一般两种

1中接口中返回菜单

2 接口中返回权限,前端做匹配

  • 一般都是那种结合,react中没有vue那种钩子函数如何做?

    在项目中写一个高阶函数,在高阶函数中判断权限、是否登录等操作

    app.tsx或者man.tsx中使用 《AuthRouter》 高阶函数
    <HashRouter>
    <ConfigProvider locale={i18nLocale} componentSize={assemblySize}>
    <AuthRouter>
    <Router />
    </AuthRouter>
    </ConfigProvider>
    </HashRouter>

    创建高阶函数
    AuthRouter.tsx
    import { Navigate, useLocation } from 'react-router-dom';

    import { useSelector } from 'react-redux';
    import { RootState } from '@/store';
    import {searchRoute} from "@/utils/util"
    import { HOME_URL } from "@/config/config";
    function AutnToken(props: { children: JSX.Element }) {
    const userData=useSelector((state:RootState) => state.getDataConfig)

    复制代码
      const {token}=userData
      // 获取接口中的路由 一维数组,如果是多维需自己转一维
      const { authRouter } = useSelector((state: RootState) => state.auth);
      // rootRouter
      //这里可以使用接口中或者前端本地的路由数据
      const rootRouter: never[]=[] //
      // 获取当前路由信息
      const { pathname } = useLocation();
      // 获取当前路由对应的信息
      const route = searchRoute(pathname, rootRouter);
    
      // * 判断当前路由是否需要访问权限(不需要权限直接放行)
      if (!route.meta?.requiresAuth) return props.children;
      // * 判断是否有Token
      if (!token) return <Navigate to="/login" replace />;
      // * Static Router(静态路由,必须配置首页地址,否则不能进首页获取菜单、按钮权限等数据),获取数据的时候会loading,所有配置首页地址也没问题
      const staticRouter = [HOME_URL, "/405"];
      const routerList = authRouter.concat(staticRouter);
      // * 如果访问的地址没有在路由表中重定向到405页面
      if (routerList.indexOf(pathname) == -1) return <Navigate to="/405" />;
      // * 当前账号有权限返回 Router,正常访问页面
      return props.children;

    }

    export default AutnToken

config/config中配置

复制代码
默认首页地址
export const HOME_URL: string = "/home/index"; 这个是必须有的

这样就实现, 未登录token不存在、路由不存在、当前路由不在后端接口中不显示并跳转404/405页面

项目截图


相关推荐
Lupino23 分钟前
被 React “玩弄”的 24 小时:为了修一个不存在的 Bug,我给大模型送了顿火锅钱
前端·react.js
米丘29 分钟前
了解 Javascript 模块化,更好地掌握 Vite 、Webpack、Rollup 等打包工具
前端
Heo31 分钟前
深入 React19 Diff 算法
前端·javascript·面试
滕青山32 分钟前
个人所得税计算器 在线工具核心JS实现
前端·javascript·vue.js
小怪点点33 分钟前
手写promise
前端·promise
国思RDIF框架41 分钟前
RDIFramework.NET Web 敏捷开发框架 V6.3 发布 (.NET8+、Framework 双引擎)
前端
Mintopia43 分钟前
如何在有限的时间里,活出几倍的人生
前端
炫饭第一名43 分钟前
速通Canvas指北🦮——变形、渐变与阴影篇
前端·javascript·程序员
Neptune144 分钟前
让我带你迅速吃透React组件通信:从入门到精通(上篇)
前端·javascript
阿懂在掘金1 小时前
Vue 表单避坑(一):为什么 v-model 绑定对象属性会偷偷修改父组件数据?
前端·vue.js