在React与Node.js中基于Axios实现OAuth1.0 GET请求
解决方案
你当前的代码是按照OAuth2.0客户端凭证模式编写的,和需求的OAuth 1.0 PlainText签名认证不匹配,需要借助专门的OAuth 1.0库来生成符合要求的请求头。
步骤1:安装依赖
需要安装axios和oauth-1.0a(用于生成OAuth 1.0签名):
npm install axios oauth-1.0a # 或使用yarn yarn add axios oauth-1.0a
步骤2:编写请求代码
以下是适配需求的完整代码:
import axios from 'axios'; import OAuth from 'oauth-1.0a'; // 配置OAuth 1.0参数 const oauth = OAuth({ consumer: { key: 'CK', // 你的ConsumerKey secret: 'CS' // 你的ConsumerSecret }, signature_method: 'PLAINTEXT', // 指定签名方法为PlainText hash_function: (base_string, key) => key // PlainText模式下直接返回密钥组合 }); // 定义请求参数 const requestData = { url: 'https://api.tmsandbox.co.nz/v1/Search/General.xml', method: 'GET', params: { category: '0124-0424-', condition: 'Used', sort_order: 'ExpiryDesc' } }; // 生成Authorization头 const token = { key: 'AT', // 你的AccessToken secret: 'TS' // 你的TokenSecret }; const headers = oauth.toHeader(oauth.authorize(requestData, token)); // 发送GET请求 axios(requestData.url, { method: requestData.method, params: requestData.params, headers: headers }) .then(response => { console.log('请求成功:', response.data); }) .catch(error => { console.error('请求失败:', error); });
关键说明
- OAuth 1.0 PlainText签名模式下,签名会直接使用
ConsumerSecret&TokenSecret的组合,不需要复杂的哈希计算,所以hash_function直接返回密钥即可。 - 必须将请求的URL、方法、参数都传入
oauth.authorize()方法,才能生成正确的Authorization头。 - 如果是在Node.js环境中使用,无需额外处理CORS;如果是React前端直接请求,需要确保目标API允许跨域,或者通过Node.js后端做请求代理。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

