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
相关产品推荐
相关产品推荐

