WordPress:使用JWT Auth插件无法访问REST API /posts端点
问题原因及解决方案
核心原因
- 身份验证未关联REST API权限校验:你获取的JWT Token本身有效,但JWT Auth插件未正确将Token对应的用户身份传递给WP REST API的权限校验逻辑。WP REST API的文章编辑/更新操作要求请求来自已授权用户,若插件配置不到位,REST API无法识别
Authorization: Bearer头里的Token,会将请求判定为未登录用户发起,因此返回rest_cannot_edit错误。 - 核心REST API的默认权限限制:禁用插件后仍报错,是因为WP核心REST API本身就要求编辑/更新类的POST请求必须来自已授权用户。此时没有JWT插件提供身份验证机制,前端请求又无法通过常规Cookie完成身份校验(尤其是跨域场景下),所以同样返回401未授权。
解决步骤
1. 补全JWT Auth插件配置
在wp-config.php文件中添加以下必要配置:
// 生成一个随机密钥(可通过在线随机字符串工具生成) define('JWT_AUTH_SECRET_KEY', 'your-random-secret-key'); // 启用CORS支持,解决跨域请求的头信息问题 define('JWT_AUTH_CORS_ENABLE', true);
2. 配置服务器支持HTTP_AUTHORIZATION头
多数服务器默认会丢弃Authorization请求头,需手动配置开启:
- Apache服务器:在网站根目录的
.htaccess文件中添加规则:RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1] - Nginx服务器:在站点配置的
location ~ \.php$块中添加:fastcgi_param HTTP_AUTHORIZATION $http_authorization;
3. 验证请求与用户权限
- 确认Token对应的
admin用户拥有edit_posts权限(管理员默认具备),同时目标文章(ID=1)确实存在,且该用户有权限编辑它(如为文章作者或管理员身份)。 - 若要创建新文章,请将请求地址改为
/wp-json/wp/v2/posts(POST请求对应创建操作);/wp-json/wp/v2/posts/1的POST请求是更新已有文章,需确保文章ID正确。
4. 检查请求头格式
确保Authorization头格式完全正确:Bearer 后必须带空格,且Token完整无截断。你的代码中'Bearer '+token的写法是正确的,可在浏览器控制台打印请求头确认最终格式。
内容的提问来源于stack exchange,提问作者stckvrw
相关产品推荐
相关产品推荐

