You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让oauth-1.0a与crypto适配WP-API?Ionic2调用报错求助

解决Ionic2中调用WP-API OAuth认证返回status 0的问题

首先,你碰到的status: 0和type: 3错误,在Ionic/Angular的Http请求场景里,大概率和请求未正常发送/被拦截或者跨域(CORS)限制有关,结合你用OAuth认证的情况,我们一步步排查解决:

1. 先检查Authorization头的格式是否正确

你给出的headers里Authorization字段明显格式有问题——OAuth 1.0a的Authorization头必须是完整的字符串,参数用逗号分隔,每个键值对都要用双引号包裹,正确格式应该是这样:

Authorization: OAuth oauth_consumer_key="你的密钥", oauth_nonce="jSZGPwkj4quRGMb0bh...", oauth_signature="xxx", oauth_signature_method="HMAC-SHA1", oauth_timestamp="123456789", oauth_version="1.0"

别手动拼接这个头!直接用oauth-1.0a库的toHeader()方法生成,它会帮你处理好格式:

const oauth = new OAuth({
  consumer: { key: 'YOUR_CONSUMER_KEY', secret: 'YOUR_CONSUMER_SECRET' },
  signature_method: 'HMAC-SHA1',
  hash_function(base_string, key) {
    return crypto.createHmac('sha1', key).update(base_string).digest('base64');
  }
});

const requestData = {
  url: 'https://你的WP站点域名/wp-json/wp/v2/posts',
  method: 'GET'
};

// 直接拿到正确格式的Authorization头
const authHeaders = oauth.toHeader(oauth.authorize(requestData));

2. 排查CORS跨域问题

Postman测试正常是因为它不受浏览器CORS策略限制,但Ionic在浏览器调试时(或Web端运行)会被浏览器的跨域规则拦截。WP-API这边需要配置CORS:

  • 最简单的方式是安装激活WP REST API CORS插件;
  • 也可以在主题的functions.php里手动添加CORS头(生产环境建议把*换成你的Ionic应用域名):
add_action('rest_api_init', function () {
    remove_filter('rest_pre_serve_request', 'rest_send_cors_headers');
    add_filter('rest_pre_serve_request', function ($value) {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
        header('Access-Control-Allow-Headers: Authorization, Content-Type');
        return $value;
    });
}, 15);

如果真机测试正常、浏览器调试报错,那基本就是浏览器CORS限制导致的,用Ionic代理也能绕过:在ionic.config.json里添加代理配置:

{
  "name": "你的应用名",
  "proxies": [
    {
      "path": "/wp-json",
      "proxyUrl": "https://你的WP站点域名/wp-json"
    }
  ]
}

之后请求URL改成/wp-json/wp/v2/posts,Ionic会帮你转发请求绕开CORS。

3. 规范Ionic Http模块的使用方式

在Ionic2里,要确保正确导入和使用Http模块,把oauth生成的头包装成Angular的Headers实例:

import { Http, Headers, RequestOptions } from '@angular/http';

// ...

// 把oauth生成的头转成Angular Headers对象
const headers = new Headers(authHeaders);
const requestOptions = new RequestOptions({ headers: headers });

this.http.get('https://你的WP站点域名/wp-json/wp/v2/posts', requestOptions)
  .subscribe(
    res => console.log('请求成功:', res),
    err => console.error('请求失败:', err)
  );

4. 检查URL和协议是否正确

  • 确保请求URL是完整的(包含http://或https://),不要省略协议;
  • 如果WP站点用了HTTPS,你的Ionic请求也必须用HTTPS,否则浏览器会拦截混合内容请求,导致status:0。

内容的提问来源于stack exchange,提问作者Mazolo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:25:27