具有代理扩展 POST 请求的 Shopify 应用无法正常工作

Shopify app with proxy extension POST requests not working

按照此处的指南操作:https://shopify.dev/tutorials/display-data-on-an-online-store-with-an-application-proxy-app-extension

GET 请求对我来说工作正常。

但是当我尝试执行 POST 请求时,我的参数没有通过。

我正在构建一个简单的心愿单应用程序,用户可以在其中点击产品上的爱心并将其添加到数据库中。

所以我的代码,当他们点击心脏时,看起来像这样:

    $.ajax({
        url: '/apps/wishlist/save',
        type: 'POST',
        data: {
            shop: shop,
            customerId: customerId,
            productId: productId
        },
        dataType: 'json',
        success: function (data) {
          console.info(data);
        }
    });

当我在 Chrome Dev Tools 的网络选项卡中检查这个 post 时,原来的 POST 遇到了 301,然后 Shopify 正在创建一个 GET 请求到原来的 URL 的 different/missing 参数如下所示:

shop: example.myshopify.com
path_prefix: /apps/wishlist
timestamp: 1585769299
signature: examplesignature

如果我将原始 AJAX 请求更改为 GET,那么我的原始参数将按预期传递。

这里不允许 POST 请求吗?

尝试将 / 添加到 url 的末尾,即将其更改为 /apps/wishlist/save/

澄清一下。 Vladimir answer 有效,为什么? 似乎 Shopify 更改了某些 POST 请求的身份验证流程。 您必须发送不带 cookie 的请求,或者您可以发送带有 X-Shopify-Access-Token header 的请求并使用您应用的密码。它们应该都可以工作,但有些使用情况不允许您在没有 cookie 的情况下发送请求或仅使用基本身份验证(取决于您用于发送请求的方法和软件)。 Shopify 的开发者当然并不疯狂,这是为了避免某种基于特定攻击方法的黑客攻击而实施的,但也许应该在他们的文档中明确说明。即使上面解释的解决方案应该是首选,正如所说它在某些情况下不起作用,所以 Vladimir 's solution 是一个有效的替代方案(您也可以在 URL 的末尾添加一个点,例如: www.example.com./etc/etc), 这是因为这种方式“阻止”了 cookie seeding。 您可以在 Sopify 的社区讨论后了解更多信息 here