当前位置:首页 > React

React如何保持登录状态

2026-03-10 20:53:20React

使用本地存储(LocalStorage/SessionStorage)

将用户登录凭证(如Token)存储在浏览器的localStoragesessionStorage中。localStorage数据持久化,关闭浏览器后仍存在;sessionStorage仅在当前会话有效。

// 登录成功后存储Token
localStorage.setItem('authToken', 'your_jwt_token_here');

// 应用初始化时检查Token
const token = localStorage.getItem('authToken');
if (token) {
  // 存在Token则视为已登录
}

使用Context API管理全局状态

创建全局的AuthContext,包裹整个应用,通过Context传递登录状态和用户信息。

React如何保持登录状态

import React, { createContext, useState, useContext } from 'react';

const AuthContext = createContext();

export const AuthProvider = ({ children }) => {
  const [user, setUser] = useState(null);

  const login = (userData, token) => {
    setUser(userData);
    localStorage.setItem('authToken', token);
  };

  const logout = () => {
    setUser(null);
    localStorage.removeItem('authToken');
  };

  return (
    <AuthContext.Provider value={{ user, login, logout }}>
      {children}
    </AuthContext.Provider>
  );
};

export const useAuth = () => useContext(AuthContext);

封装受保护路由

创建高阶组件或自定义Hook,拦截未登录用户访问受限路由。

React如何保持登录状态

import { Navigate } from 'react-router-dom';
import { useAuth } from './AuthContext';

const PrivateRoute = ({ children }) => {
  const { user } = useAuth();
  return user ? children : <Navigate to="/login" />;
};

自动刷新Token机制

实现Token过期前的自动刷新,避免频繁要求用户重新登录。

// 在API请求拦截器中检查Token有效期
axios.interceptors.response.use(
  response => response,
  async error => {
    const originalRequest = error.config;
    if (error.response.status === 401 && !originalRequest._retry) {
      originalRequest._retry = true;
      const newToken = await refreshToken();
      localStorage.setItem('authToken', newToken);
      return axios(originalRequest);
    }
    return Promise.reject(error);
  }
);

服务端验证

每次关键请求都需向服务端验证Token有效性,防止本地存储被篡改。

const verifyToken = async () => {
  try {
    const response = await axios.get('/api/verify', {
      headers: { Authorization: `Bearer ${localStorage.getItem('authToken')}` }
    });
    return response.data.valid;
  } catch (error) {
    return false;
  }
};

标签: 状态React
分享给朋友:

相关文章

简单vue状态管理实现

简单vue状态管理实现

Vue 状态管理实现方法 使用 Vue 的响应式系统 Vue 的响应式系统可以轻松实现简单的状态管理。通过创建一个响应式对象,可以在多个组件之间共享状态。 // store.js import {…

React如何监听数据

React如何监听数据

监听数据的方法 在React中监听数据变化可以通过多种方式实现,具体取决于数据的来源和状态管理方式。 使用useEffect钩子 useEffect是React Hooks中用于监听数据变化的常用方…

React如何创建store

React如何创建store

创建 Redux Store 的基本步骤 安装 Redux 和 React-Redux 依赖包: npm install redux react-redux 创建 reducer 函数管理状态:…

react如何维护状态

react如何维护状态

使用 useState Hook 管理简单状态 在函数组件中,useState 是最基础的状态管理方式。它返回一个状态值和一个更新该状态的函数。适用于组件内部的简单状态管理。 import Reac…

react如何控制loading状态

react如何控制loading状态

控制 Loading 状态的方法 在 React 中,可以通过多种方式控制 Loading 状态,以下是几种常见的实现方法: 使用 useState 钩子管理状态 import { useStat…

React如何阻断render刷新

React如何阻断render刷新

使用 shouldComponentUpdate 生命周期方法 在类组件中,可以通过实现 shouldComponentUpdate 方法来控制组件是否需要重新渲染。该方法接收 nextProps 和…