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

Laravel部署Shopify应用报Missing Authorization key错误排查

问题根因

该报错和iframe嵌入场景无关,核心是请求到达Shopify SDK前,Authorization鉴权头被Web服务器、框架层拦截或格式不匹配,导致SDK无法读取到已携带的Bearer令牌。本地开发时Vite/PHP内置服务器默认会透传所有头,所以不会出现该问题,部署到生产环境后Web服务器默认配置会丢弃该头。

解决方案(按排查优先级排序)

1. 配置Web服务器透传Authorization头

这是该场景下最高发的问题,PHP-FPM默认不会主动把Authorization头传递给上层PHP应用,需要手动修改Web服务器配置:

  • Nginx环境:在站点对应的fastcgi配置段新增两行参数传递规则:
# 原有fastcgi配置保留,新增以下两行
fastcgi_param HTTP_AUTHORIZATION $http_authorization;
fastcgi_param Authorization $http_authorization;

修改后执行nginx -t校验配置无语法错误,执行systemctl reload nginx重载配置生效。

  • Apache环境:在站点配置文件或项目public目录下的.htaccess中添加重写规则:
RewriteEngine On
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

修改完成后重启Apache服务即可。

2. 配置Laravel信任代理

AWS部署如果使用了ALB负载均衡、CloudFront CDN这类反向代理,Laravel默认不信任代理来源的请求头,会自动过滤Authorization等非标准头。修改app/Http/Middleware/TrustProxies.php文件:

// 信任所有代理IP,AWS生产环境直接使用该配置即可
protected $proxies = '*';
// 适配AWS负载均衡的转发头格式
protected $headers = Request::HEADER_X_FORWARDED_AWS_ELB;

3. 兼容SDK头键名匹配规则

Shopify PHP SDK读取头时匹配首字母大写的Authorization键名,而Laravel基于Symfony实现的Request对象,header()方法返回的数组默认使用全小写键名,会导致SDK匹配失败。
在调用SDK方法前手动补全对应键值即可:

$requestHeaders = $request->header();
// 补全SDK识别的大写键名头
if (isset($requestHeaders['authorization'])) {
    $requestHeaders['Authorization'] = $requestHeaders['authorization'][0];
}
$session = Utils::loadCurrentSession($requestHeaders, $request->cookie(), $isOnline);

4. 排除CSRF中间件拦截

如果你的API路由被错误归入web中间件组,Laravel默认的CSRF校验中间件会拦截未携带CSRF令牌的请求,导致鉴权头无法到达业务逻辑。
确认所有/api前缀的路由都位于routes/api.php文件中,或在app/Http/Middleware/VerifyCsrfToken.php的排除列表中添加API路径:

protected $except = [
    '/api/*',
];
校验方式

配置完成后,在调用loadCurrentSession前打印$request->header('Authorization'),如果能正常返回Bearer <令牌内容>格式的字符串,接口即可正常响应,不会再抛出缺失头的异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 17:06:25