React 开发登录权限校验

简介: 在前端开发的过程中,使用 React 开发的时候,不可避免的需要牵涉到登录校验,访问某些接口或者页面的时候,如果没有登录则自动跳转到登录界面。

一般登录权限校验分为两种情况:API 接口校验 和 页面级校验。

1. API 接口校验

API 接口校验一般为在每一次登录的时候,接口都会返回不同的标记来告诉调用者是否已经登录,例如:如果已经登录返回 { code: 0 },尚未登录返回 { code: -1, message: '尚未登录' } 或者有时候直接通过 401 Unauthorized - HTTP 来表明尚未登录。
这种形式的处理方式其实相对比较简单, 只需要在页面开始的地方做一次接口拦截就行了。下面我就以 401 - status 为例进行说明:

// 1. 在 main.js 里面添加如下代码
phax.interceptors.response(
  () => {},
  (err) => {
    if (err.status === 401) {
      location.href = '/login'
    }
  },
)
这里我的跳转登录使用的是原生的 location 的方式,也可以使用 React 路由跳转 history 进行跳转,使用代码如下:
// 1. 首先执行 npm install history
import { createBrowserHistory } from 'history';
// 如果需要注意如果 history 版本是 v4 的话,需要传递参数 { forceRefresh: true } 要不然只是地址变了,页面依然没有刷新
let history = createBrowserHistory();

history.push('/login');
示例代码,我用的 http 请求库为自己独立封装的一套使用 fetch 进行请求的库 phax

2. 页面级校验

这种方式为每一次进入页面(或者刷新)都需要进行一次登录校验,这个时候需要在路由上下功夫,需要新增一个权限校验的组件,代码如下:

import React from 'react'
import Home from './Home'
import Login from './Login'

function Auth() {
  // 这里我只是做为演示,使用的前端的模式
  // 其实这里可以加上一个调用后台校验的模式,同时也可以作为刷新 token 有效期
  let isCheck = sessionStorage.getItem('check_login')
  
  let $Auth = <div />
  if (isCheck === '1') {
    $Auth = <Home />
  } else {
    $Auth = <Login />
  }

  return (
    <>
      <span />
      {$Auth}
    </>
  )
}

export default Auth

然后将校验组件放到路由里面

import React from 'react'
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
import './App.less'
import Login from './views/Login'
import Auth from './views/Auth'

function App() {
  return (
    <Router basename="/">
      <Switch>
        <Route path="/login" component={Login} />
        <Route path="/" component={Auth} />
      </Switch>
    </Router>
  )
}

export default App

其实在 Auth.tsx 里面可以做很多操作。

其实很多时候,我们的权限校验是两种方式都有的,其实两种模式互不冲突,完全可以整合到一起。

相关文章
|
3月前
|
前端开发 JavaScript API
React开发需要了解的10个库
本文首发于微信公众号“前端徐徐”,介绍了React及其常用库。React是由Meta开发的JavaScript库,用于构建动态用户界面,广泛应用于Facebook、Instagram等知名网站。文章详细讲解了Axios、Formik、React Helmet、React-Redux、React Router DOM、Dotenv、ESLint、Storybook、Framer Motion和React Bootstrap等库的使用方法和应用场景,帮助开发者提升开发效率和代码质量。
151 4
React开发需要了解的10个库
|
5月前
|
设计模式 存储 前端开发
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
React开发设计模式及原则概念问题之自定义Hooks的作用是什么,自定义Hooks设计时要遵循什么原则呢
|
3月前
|
前端开发 JavaScript 开发者
React 组件化开发最佳实践
【10月更文挑战第4天】React 组件化开发最佳实践
75 4
|
4月前
|
XML 移动开发 前端开发
使用duxapp开发 React Native App 事半功倍
对于Taro的壳子,或者原生React Native,都会存在 `android` `ios`这两个文件夹,而在duxapp中,这些文件夹的内容是自动生成的,那么对于需要在这些文件夹中修改的配置内容,例如包名、版本号、新架构开关等,都通过配置文件的方式配置了,而不需要需修改具体的文件
|
4月前
|
前端开发 JavaScript
React配合axios请求拦截校验session,403跳转至登陆页面
React中使用axios进行请求拦截,通过自定义事件监听和响应拦截实现403状态码时的自动登录页面跳转。
131 2
|
4月前
|
资源调度 JavaScript 前端开发
使用vite+react+ts+Ant Design开发后台管理项目(二)
使用vite+react+ts+Ant Design开发后台管理项目(二)
|
4月前
|
前端开发 数据安全/隐私保护
react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)
文章介绍了如何在React项目中使用Ant Design实现一个修改密码的组件,包括原密码、新密码和再次输入新密码的表单项,并为新密码增加了正则表达式复杂度校验。
98 0
react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)
|
5月前
|
资源调度 前端开发 数据安全/隐私保护
react动态路由权限
【8月更文挑战第29天】 react动态路由权限
134 4
|
5月前
|
开发者 自然语言处理 存储
语言不再是壁垒:掌握 JSF 国际化技巧,轻松构建多语言支持的 Web 应用
【8月更文挑战第31天】JavaServer Faces (JSF) 框架提供了强大的国际化 (I18N) 和本地化 (L10N) 支持,使开发者能轻松添加多语言功能。本文通过具体案例展示如何在 JSF 应用中实现多语言支持,包括创建项目、配置语言资源文件 (`messages_xx.properties`)、设置 `web.xml`、编写 Managed Bean (`LanguageBean`) 处理语言选择,以及使用 Facelets 页面 (`index.xhtml`) 显示多语言消息。通过这些步骤,你将学会如何配置 JSF 环境、编写语言资源文件,并实现动态语言切换。
53 1
|
4月前
|
缓存 前端开发 JavaScript
在react项目中实现按钮权限createContext && useContext
文章介绍了在React项目中如何使用`createContext`和`useContext`来实现按钮级别的权限控制。
94 0