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

Angular调用WordPress自定义REST接口遇403权限问题求助

Fixing "rest_forbidden" Error with JWT Auth in WordPress Custom REST Endpoint

我来帮你排查这个问题,你遇到的rest_forbidden错误主要有几个关键点需要修正,咱们一步步来:

1. 修正自定义接口的权限回调逻辑

你的permission_callback直接调用current_user_can('edit_others_posts'),但如果JWT Token验证后没有正确初始化当前用户,这个判断会直接失败。建议先验证用户是否登录,再检查权限:

'permission_callback' => function () {
    // 先确认用户已通过JWT验证登录
    if ( ! is_user_logged_in() ) {
        return false;
    }
    // 再检查用户是否拥有对应权限(admin默认拥有该权限,若修改过权限需确认)
    return current_user_can( 'edit_others_posts' );
}

2. 修复回调函数的变量错误

你的testFunction里定义了$current_user,但返回的$user_id是未定义的变量,这会触发PHP错误,可能间接影响接口响应:

function testFunction($data) {
  $current_user = wp_get_current_user();
  // 返回正确的用户ID
  return $current_user->ID;
};

3. 确认JWT Auth插件的必要配置

虽然你已经成功获取了Token,但WordPress的JWT Auth插件需要在wp-config.php中添加核心配置,确保Token能被正确解析并关联到用户:

// 替换为随机生成的密钥(可通过WordPress官方密钥生成工具生成)
define('JWT_AUTH_SECRET_KEY', 'your-random-secret-key-here');
// 开启跨域支持,适配Angular前端的跨域请求
define('JWT_AUTH_CORS_ENABLE', true);

缺少这些配置的话,即使拿到Token,REST API也无法正确识别用户身份,导致权限验证失败。

4. 优化Angular的HttpHeaders设置(规范写法)

Angular的HttpHeaders是不可变对象,set方法会返回新实例,你获取Token时的代码可以调整为更规范的写法,确保请求头被正确设置:

logIn(){
  let loginInfo ={ username: 'admin', password: 'password.' };
  // 正确创建带Content-Type的请求头
  let headers = new HttpHeaders().set('Content-Type', 'application/json');
  this.http.post( this.apiURL + 'wp-json/jwt-auth/v1/token' , loginInfo , { headers: headers} ).subscribe(
    data => { this.token = data['token']; } ,
    err => { console.log(err); }
  );
};

完成以上修改后,重新获取Token并调用/test/v1/test接口,应该就能正常返回当前用户ID,不再出现权限错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:47:16