当前位置:首页 > React

react如何获取token

2026-03-31 12:09:04React

获取 Token 的方法

在 React 中获取 Token 通常涉及与后端 API 的交互,例如登录认证或第三方服务(如 OAuth)。以下是几种常见场景的实现方法:

通过登录表单提交获取 Token

在用户提交登录表单后,将用户名和密码发送到后端 API,接收返回的 Token 并存储。

import React, { useState } from 'react';
import axios from 'axios';

const LoginForm = () => {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');

  const handleSubmit = async (e) => {
    e.preventDefault();
    try {
      const response = await axios.post('https://api.example.com/login', {
        username,
        password,
      });
      const token = response.data.token;
      localStorage.setItem('token', token); // 存储 Token
      console.log('Token:', token);
    } catch (error) {
      console.error('Login failed:', error);
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={username}
        onChange={(e) => setUsername(e.target.value)}
        placeholder="Username"
      />
      <input
        type="password"
        value={password}
        onChange={(e) => setPassword(e.target.value)}
        placeholder="Password"
      />
      <button type="submit">Login</button>
    </form>
  );
};

通过 OAuth 授权获取 Token

使用第三方 OAuth 服务(如 Google、GitHub)获取 Token,通常需要重定向到授权页面并回调处理 Token。

import React from 'react';

const OAuthLogin = () => {
  const handleOAuthRedirect = () => {
    const clientId = 'YOUR_CLIENT_ID';
    const redirectUri = encodeURIComponent('http://localhost:3000/callback');
    const authUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=token&scope=email`;
    window.location.href = authUrl;
  };

  return <button onClick={handleOAuthRedirect}>Login with Google</button>;
};

在回调页面中解析 URL 中的 Token:

import React, { useEffect } from 'react';
import { useLocation } from 'react-router-dom';

const OAuthCallback = () => {
  const location = useLocation();

  useEffect(() => {
    const hash = location.hash.substring(1);
    const params = new URLSearchParams(hash);
    const token = params.get('access_token');
    if (token) {
      localStorage.setItem('token', token);
      console.log('OAuth Token:', token);
    }
  }, [location]);

  return <div>Processing OAuth callback...</div>;
};

从本地存储读取 Token

如果 Token 已存储在 localStoragesessionStorage 中,可以直接读取:

const token = localStorage.getItem('token');
if (token) {
  console.log('Stored Token:', token);
}

通过 HTTP 请求头传递 Token

在后续 API 请求中,将 Token 添加到请求头:

axios.get('https://api.example.com/protected', {
  headers: {
    Authorization: `Bearer ${localStorage.getItem('token')}`,
  },
});

使用 Context 或状态管理共享 Token

通过 React Context 或状态管理工具(如 Redux)全局共享 Token:

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

const AuthContext = createContext();

export const AuthProvider = ({ children }) => {
  const [token, setToken] = useState(localStorage.getItem('token'));

  const login = (newToken) => {
    localStorage.setItem('token', newToken);
    setToken(newToken);
  };

  const logout = () => {
    localStorage.removeItem('token');
    setToken(null);
  };

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

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

在组件中使用:

react如何获取token

const { token, login, logout } = useAuth();

注意事项

  • 安全性:避免将 Token 暴露在客户端代码中,确保使用 HTTPS。
  • 存储方式:根据需求选择 localStorage(持久化)或 sessionStorage(会话级)。
  • 过期处理:检查 Token 有效期并实现刷新逻辑。

标签: reacttoken
分享给朋友:

相关文章

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 进行组件记忆 React.memo 是一个高阶组件,用于缓存函数组件的渲染结果,避免不必要的重新渲染。只有当组件的 props 发生变化时,才…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment 基本…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全局安…

react如何扩展

react如何扩展

扩展 React 项目的常用方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式。通过包裹组件并注入额外属性或逻辑,可以实现功能扩展。例如,一个日志记录的高阶组件: function…

react 如何修改state

react 如何修改state

修改 state 的基础方法 在 React 中,state 的修改必须通过 setState 方法(类组件)或 state 更新函数(函数组件)。直接修改 state 会导致组件不会重新渲染,且可能…

react 如何算精通

react 如何算精通

精通 React 的标准 精通 React 不仅需要掌握基础语法和核心概念,还需具备解决复杂问题、优化性能和架构设计的能力。以下是衡量 React 精通程度的关键维度: 核心概念与机制 组件…