当前位置:首页 > React

React如何保持登录状态

2026-01-24 12:32:02React

使用本地存储(localStorage/sessionStorage)

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

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

// 应用初始化时检查token
const token = localStorage.getItem('authToken');
if (token) {
  // 验证token有效性,更新应用状态
}

使用Context API管理全局状态

通过React的Context API共享登录状态,避免逐层传递props。结合useReduceruseState管理用户认证状态。

React如何保持登录状态

// 创建AuthContext
const AuthContext = createContext();

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

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

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

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

// 在组件中使用
const { user, login, logout } = useContext(AuthContext);

使用HTTP Only Cookie

后端设置HttpOnly Cookie存储token,防止XSS攻击窃取。前端每次请求自动携带Cookie,无需手动处理存储。

// 后端示例(Node.js/Express)
res.cookie('authToken', 'your_token_here', {
  httpOnly: true,
  secure: true, // 仅HTTPS
  maxAge: 86400000 // 过期时间
});

定时刷新Token

为避免token过期导致用户被迫重新登录,实现静默刷新机制。在token临近过期时,使用refresh token获取新token。

React如何保持登录状态

// 检查token过期时间并刷新
function checkTokenExpiry() {
  const token = localStorage.getItem('authToken');
  if (isTokenExpiringSoon(token)) {
    fetch('/api/refresh-token', {
      method: 'POST',
      credentials: 'include'
    }).then(res => res.json())
      .then(data => localStorage.setItem('authToken', data.newToken));
  }
}

// 定时检查(如每小时一次)
setInterval(checkTokenExpiry, 3600000);

路由守卫(Protected Routes)

通过高阶组件或自定义钩子限制未登录用户访问特定路由,自动跳转到登录页。

function PrivateRoute({ component: Component, ...rest }) {
  const { user } = useContext(AuthContext);
  return (
    <Route
      {...rest}
      render={props =>
        user ? <Component {...props} /> : <Redirect to="/login" />
      }
    />
  );
}

服务端渲染(SSR)兼容

在Next.js等框架中,结合getServerSideProps或中间件验证服务端登录状态,确保首屏渲染时已同步认证状态。

// Next.js示例
export async function getServerSideProps(context) {
  const { req } = context;
  const token = req.cookies.authToken;
  if (!token) {
    return { redirect: { destination: '/login' } };
  }
  return { props: { user: await verifyToken(token) } };
}

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

相关文章

vue实现不同状态

vue实现不同状态

Vue 实现不同状态的方法 在 Vue 中管理不同状态可以通过多种方式实现,以下是几种常见的方法: 使用 data 属性管理状态 在 Vue 组件中,可以通过 data 属性定义和管理状态。这种方式…

vue实现编辑状态

vue实现编辑状态

Vue 实现编辑状态的方法 在 Vue 中实现编辑状态通常涉及数据绑定、状态管理和事件处理。以下是几种常见的方法: 使用 v-model 绑定数据 通过 v-model 实现双向数据绑定,结合 v-…

vue怎么实现多选状态

vue怎么实现多选状态

Vue 实现多选状态的方法 使用 v-model 绑定数组 通过 v-model 绑定一个数组,可以自动收集多选的值。适用于复选框组或多选下拉框。 <template> <di…

react中的状态如何使用

react中的状态如何使用

React 状态的基本使用 在 React 中,状态(State)用于存储组件内部可变的数据。类组件使用 this.state 和 this.setState,函数组件使用 useState Hook…

react如何根据状态判断展示

react如何根据状态判断展示

根据状态条件渲染 在React中可以通过状态(state)和条件语句动态控制UI渲染。常见方法包括if/else、三元运算符、逻辑与(&&)运算符等。 function Exampl…