项目中实现简单的react登录鉴权

 创建一个路由映射表

import Home from '../pages/home/Home'
import Login from '../pages/login/Login'
import {IRoutes} from '../types/routes-type'
const routes:Array<IRoutes> = [
{path:'/login',name:"home",component:Login},
{auth:true,path:'/home',name:"home",component:Home},
{auth:true,path:'/gen/serviceorder/getEveryIncome',name:"getEveryIncome",component:Home},
{auth:true,path:'/gen/serviceorder/getTotalIncome',name:"getTotalIncome",component:Home},
{auth:true,path:'/shoporder/myServiceOrder',name:"myServiceOrder",component:Home},
{auth:true,path:'/shoporder/myShopOrderData',name:"myShopOrderData",component:Home},
{auth:true,path:'/message',name:"message",component:Home},
{auth:true,path:'/serviceinfo',name:"serviceinfo",component:Home},
//省略后面的路由
]
export default routes

 创建一个RouterAuth高阶组件

import React from 'react';
import { Redirect, Route } from 'react-router';
import {useLocation} from 'react-router-dom';//获取路由对象
import routes from '../config/routerConfig';//引入路由映射表
type Props = {}
export default function RouterAuth(props: Props) {
    const location = useLocation<Location>();
    const pathname:string = location.pathname;//取到当前路由
    const token:string  = window.localStorage.getItem('token') || '';
    //判断当前路由是否在路由映射表中
    const targetRouter:any = routes.find(item=>item.path.replace(/\s*/g,'') ===pathname)
    //判断是否在配置文件中
    if(targetRouter){
        //判断是否需要身份认证
        if(targetRouter.auth){
            //进行token验证
            if(token){
                return <Route path={targetRouter.path} component={targetRouter.component}></Route>
            }else{//不通过返回login
                return <Redirect to='/login'></Redirect>
            }
        }else{//不需要则通过
        return <Route path={targetRouter.path} component={targetRouter.component}></Route>
        }
    }else{//没有返回404
    return <Redirect to="/404"></Redirect>
    }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值