我已经使用 PHP(7.0 版)构建了一个自定义 API,特别是使用 tymon/jwt-auth(1.0.0-rc.2 版)包进行用户授权的 Laravel 框架(5.5.40 版)。我的许多控制器功能使用这一行来获取当前用户的凭据:
$user = JWTAuth::parseToken()->authenticate();
我使用 Postman 来测试我的 api。
当我在本地环境中进行 api 调用时,授权正常通过并返回预期数据。当我对我的实时站点 API(托管在我的 apache 服务器中)进行 api 调用时,我收到此错误:
无法从请求中解析令牌
由于这个错误只发生在我的实时 API 上,我推测我的 API 的 .htaccess 文件有问题(顺便说一下,应用程序可以正常识别,我做了一些调试并检查了我的 apache error_log 以确保对我的API 的 .htaccess 被识别)。我尝试添加这些行(以及这些行的不同变体,因为我在研究时遇到了多个建议):
RewriteEngine On
RewriteCond %{HTTP:Authorization} .+
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
但错误仍然存在。我尝试添加此代码:
var_dump($_SERVER);
在...之前:
$user = JWTAuth::parseToken()->authenticate();
我注意到在我的实时 API 中,$_SERVER 数组中缺少这些元素: REDIRECT_HTTP_AUTHORIZATION、HTTP_AUTHORIZATION
上面的 .htaccess 代码不是要手动添加这些吗?
这些是我在 Chrome DevTools 中看到的响应头:
访问控制允许来源: http:/example.gr
缓存控制:无缓存,私有
连接:关闭
内容编码: gzip
内容类型:应用程序/json
日期: 2019 年 5 月 14 日,星期二 11:33:10 GMT
服务器:阿帕奇
传输编码:分块
变化:起源,接受编码
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
这些是我的请求标头(显示临时标头):
接受:应用程序/json,文本/纯文本,/
授权:承载eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9hcGkudjIucmVzY2FwZXIuaG9uZXN0cGFydG5lcnMuZ3JcL2FwaVwvYXV0aFwvbG9naW4iLCJpYXQiOjE1NTc4MzM1ODksImV4cCI6MTY0NDIzMzU4OSwibmJmIjoxNTU3ODMzNTg5LCJqdGkiOiJweDRjNDlOckFQbGMyM21OIiwic3ViIjo1LCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.YWPhPDeNrB4TI1gdhBYylrmIAs1-R1-K2M2eKyO89KY
来源: http : //example.gr
参考: http://example/summary
用户代理: Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/74.0.3729.131 Safari/537.36
幕布斯6054654
慕容708150