WP Rest API无法捕获Authorization请求头问题求助
我来帮你梳理下这个问题的排查方向,结合你用JWT Auth插件的场景,一步步来:
1. 先确认Android端请求是否真的发送了Authorization头
有时候我们以为代码里加了头,但实际可能没生效,先从客户端排查:
- 用Android Studio自带的Network Inspector查看请求详情,确认
Authorization: Bearer <你的token>这个头是否存在,注意Bearer后面必须有空格,格式不能错 - 或者用Charles/Fiddler抓包,直接看原始请求的头信息,确保客户端确实把这个头发送出去了
2. 检查WordPress的.htaccess配置是否正确
JWT Auth插件要求的核心配置必须正确放置,你提到只保留了插件要求的配置,再确认下是不是这几行,且放在RewriteEngine On之后、其他Rewrite规则之前:
RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
另外要确保你的Apache服务器开启了mod_rewrite模块,有些虚拟主机默认是关闭的,需要联系主机商开启。
3. 强化CORS配置,处理OPTIONS预检请求
虽然你开启了JWT_AUTH_CORS_ENABLE,但有时候预检请求(OPTIONS)的响应可能没包含Authorization头的允许规则,导致客户端被拦截。可以在wp-config.php里手动添加更明确的CORS处理:
add_action('init', function() { // 生产环境请替换成你的Android App对应的请求来源,不要用* header("Access-Control-Allow-Origin: *"); header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS"); header("Access-Control-Allow-Headers: Authorization, Content-Type"); // 直接响应OPTIONS请求,避免后续处理 if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { status_header(200); exit(); } });
4. 排除插件冲突和版本问题
- 暂时禁用WordPress里的其他插件,尤其是安全类、缓存类插件,有些插件会过滤或移除Authorization头
- 确认JWT Auth插件、WordPress、WooCommerce都是最新兼容版本,旧版本可能存在头传递的bug
5. 服务器环境的额外检查
如果你的服务器是Nginx(而非Apache),需要在Nginx配置里添加传递Authorization头的规则:
location / { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # 替换成你的PHP-FPM路径 fastcgi_param HTTP_AUTHORIZATION $http_authorization; # 其他fastcgi配置... }
另外可以写个简单的测试脚本,放在WordPress根目录,验证服务器是否能接收到Authorization头:
<?php // test-auth-header.php var_dump($_SERVER['HTTP_AUTHORIZATION']); ?>
用Postman调用这个脚本,带上Authorization头,看是否能输出对应的内容,这样可以排除服务器端的接收问题。
内容的提问来源于stack exchange,提问作者lakimens
相关产品推荐
相关产品推荐

