首页  >  问答  >  正文

Laravel:Shopify 标头数组中缺少授权密钥

我是 Shopify 应用开发新手。我使用 shopify 提供的 php 模板开发了一个应用程序。它使用 Laravel 和 React。这是 https://github.com/Shopify/shopify-app-template-php/tree/cli_third

当我执行 npm run dev 时,该应用程序正在开发商店中运行。

然后,我使用一个域(例如:sub.mydomain.com)在 AWS 服务器上部署了我的应用程序。

然后我在商店中安装了应用程序。

页面正在应用程序中呈现。但我在发出任何 GET 或 POST 请求时收到 500 错误。

经过调试,我发现这行代码 $session = Utils::loadCurrentSession($request->header(), $request->cookie(), $isOnline); 抛出异常,错误是:

ShopifyExceptionMissingArgumentException {#334
#message: "Missing Authorization key in headers array"
#code: 0
#file: "/var/www/html/shopify-project/web/vendor/shopify/shopify-api/src/Auth/OAuth.php"

但是在请求的 header 中,有授权码:

:authority: sub.mydomain.com
:method: GET
:path: /api/view-id
:scheme: https
accept: */*
accept-encoding: gzip, deflate, br
accept-language: en-US,en;q=0.9,ne;q=0.8
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczpcL1wvcW9kZWFuYWx5dGljcy5teXNob3BpZnkuY29tXC9hZG1pbiIsImRlc3QiOiJodHRwczpcL1wvcW9kZWFuYWx5dGljcy5teXNob3BpZnkuY29tIiwiYXVkIjoiNDBhYWM4OWM0Yzc4YmJlMjE5ZDBmMWY3NWExZjJhZTciLCJzdWIiOiI4NDM4NjcwOTc2MSIsImV4cCI6MTY1NzgxOTUyOSwibmJmIjoxNjU3ODE5NDY5LCJpYXQiOjE2NTc4MTk0NjksImp0aSI6ImRhZTI1ZjViLWIxODgtNGZkOS05MjcwLWNkOWNlODQ3MDIyZCIsInNpZCI6IjJmNTJkOTcxNTgxMDc5YmYxYmI0NDNlZWY5MGM2YTI2OGEyMmRkY2ZlZmRhMDc2YzE4NTM5OGY3YzU4ZDJmYTgifQ.ASJOsmBb4kMZz-QiRzg60pzvwDaj4w5DbZRO8mcWt1U
cache-control: no-cache
pragma: no-cache
referer: https://sub.mydomain.co/setup? hmac=633d1f9577273c7e7281dba9ca206037100dckjlkjb45ac7271674691acc6f7e6b3da&host=cW9kZWFuYWx5dGljcy5teXNob3BpZ54654nkuY29tL2FkbWlu&locale=en&session=78bbfd9e29b55c907762eba75a4a759f0691572c1f4661500f0d6d4ff6a54d86&shop=mystore.myshopify.com&timestamp=1657819465
sec-ch-ua: " Not A;Brand";v="99", "Chromium";v="99", "Google Chrome";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Linux"
sec-fetch-dest: empty
sec-fetch-mode: cors
sec-fetch-site: same-origin
user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36
x-requested-with: XMLHttpRequest

我相信,这是由于 iframe 发送的请求所致。谁能告诉我应该做什么才能允许这个请求?

P粉448346289P粉448346289306 天前401

全部回复(1)我来回复

  • P粉937382230

    P粉9373822302024-01-11 13:48:22

    我找到了解决方案! 实际上,我使用的 Laravel 模板 没有public 文件夹内的 .htaccess 文件。我必须手动添加它。

    在添加 .htaccess 文件时,它只有以下代码:

    RewriteEngine on
    
    RewriteCond  !^(index.php|resources|robots.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/ [L,QSA]

    并且授权代码未到达 Lararvel 应用程序。

    我必须在 .htaccess 文件中添加此代码:

    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    .htaccess 文件中的最终代码是:

    RewriteEngine on
    
    RewriteCond  !^(index.php|resources|robots.txt)
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/ [L,QSA]
    
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    然后,所有请求开始工作。

    回复
    0
  • 取消回复