当前位置:首页 > React

react实现登录失效

2026-01-26 20:52:50React

React 实现登录失效处理

在 React 应用中处理登录失效通常涉及以下几个关键步骤:

检查登录状态

通过检查本地存储的 token 或调用 API 验证当前登录状态是否有效。可以使用 localStoragesessionStorage 存储 token。

const checkAuth = () => {
  const token = localStorage.getItem('token');
  if (!token) {
    return false;
  }
  // 可选:调用 API 验证 token 有效性
  return true;
};

拦截请求处理失效

使用 Axios 拦截器在请求或响应时检查登录状态,如果 token 失效则跳转到登录页。

import axios from 'axios';

axios.interceptors.response.use(
  response => response,
  error => {
    if (error.response.status === 401) {
      localStorage.removeItem('token');
      window.location.href = '/login';
    }
    return Promise.reject(error);
  }
);

路由守卫保护页面

通过 React Router 的 ProtectedRoute 组件保护需要登录的页面,未登录时重定向到登录页。

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

const ProtectedRoute = ({ component: Component, ...rest }) => (
  <Route
    {...rest}
    render={props =>
      checkAuth() ? (
        <Component {...props} />
      ) : (
        <Redirect to={{ pathname: '/login', state: { from: props.location } }} />
      )
    }
  />
);

定时检查登录状态

使用 setInterval 定时检查 token 是否过期,提前通知用户或自动刷新 token。

useEffect(() => {
  const interval = setInterval(() => {
    if (!checkAuth()) {
      alert('登录已过期,请重新登录');
      window.location.href = '/login';
    }
  }, 300000); // 每 5 分钟检查一次
  return () => clearInterval(interval);
}, []);

自动刷新 token

在 token 即将过期时自动刷新,避免频繁重新登录。

const refreshToken = async () => {
  try {
    const response = await axios.post('/refresh-token', {
      refreshToken: localStorage.getItem('refreshToken'),
    });
    localStorage.setItem('token', response.data.token);
  } catch (error) {
    window.location.href = '/login';
  }
};

全局状态管理

使用 Context API 或 Redux 管理登录状态,确保所有组件能响应登录状态变化。

const AuthContext = createContext();

const AuthProvider = ({ children }) => {
  const [isAuthenticated, setIsAuthenticated] = useState(checkAuth());

  return (
    <AuthContext.Provider value={{ isAuthenticated, setIsAuthenticated }}>
      {children}
    </AuthContext.Provider>
  );
};

退出登录处理

提供明确的退出登录功能,清除所有相关数据。

react实现登录失效

const handleLogout = () => {
  localStorage.removeItem('token');
  localStorage.removeItem('refreshToken');
  window.location.href = '/login';
};

通过以上方法可以全面处理 React 应用中的登录失效问题,确保用户体验和系统安全性。

标签: react
分享给朋友:

相关文章

如何学习react

如何学习react

学习 React 的步骤 理解基础概念 React 是一个用于构建用户界面的 JavaScript 库。学习 React 之前,建议掌握 JavaScript 的基础知识,包括 ES6+ 语法(如箭头…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

react如何打包

react如何打包

打包 React 项目的基本步骤 React 项目通常使用 create-react-app 或类似的脚手架工具创建,这些工具内置了打包功能。以下是打包 React 项目的详细方法: 安装依赖并构建…

react 如何精通

react 如何精通

掌握核心概念 深入理解React的基础概念,包括组件(函数组件与类组件)、状态(useState)、生命周期(useEffect)、Props传递、虚拟DOM与Diff算法。通过官方文档或《React…

react如何建项目

react如何建项目

创建React项目的几种方法 使用官方工具Create React App(CRA) npx create-react-app my-app 这条命令会创建一个名为my-app的新React项目,包含…

react路由如何刷新

react路由如何刷新

React 路由刷新方法 在 React 中,路由刷新通常涉及以下几种场景和解决方案: 强制重新加载当前页面 使用 window.location.reload() 可以强制刷新整个页面,但会丢失…