react实现前端路由守卫路由鉴权

776 阅读1分钟

引言

登录页面

写项目的时候遇到一个问题,用户必须登录以后才能进入用户中心页面。相当于判断用户是否登录,若没有,当用户点击用户中心的时候,跳转到的是另一个页面(登录页面)。在react中并没有提供对应的api,作者github上做出了回答,他认为你可以在渲染函数中执行此操作,JSX 不需要 API,因为它更灵活。那如何实现呢?

image.png

环境

"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.6.1",
"@reduxjs/toolkit": "^1.9.1",
"react-redux": "^8.0.5"

实现

1.在用户登录成功后,将后端返回来的token、用户信息useInf、是否登录isLogin(由false改为true)放入redux和localStorage中。

2.实现RequireAuth组件。

RequireAuth主要作用是判断登录状态,如果没有登录则跳转到登录页面。

这里登录状态通过user.isLogin判断

import { useSelector } from "react-redux";
import { Navigate, useLocation } from "react-router-dom";

const RequireAuth = ({ children }) => {

  const user = useSelector(state => state.user)
  const location = useLocation();
  if (!user.isLogin) {
    return <Navigate to="/login" state={{ from: location }} replace />;
  }
  return children;
}

export default RequireAuth;

3.将要受保护的组件用RequireAuth包裹

image.png

4.实现效果

weshare - Google Chrome 2023-01-18 04-51-44.gif

  1. 登陆以后,访问用户设置页,正常访问
  2. 退出登录以后,再访问用户设置页,被重定向到登录页面了

项目地址

一款基于发帖的pc端社交网站

前端:github.com/missingone6…

后端:github.com/missingone6…