具有代理扩展 POST 请求的 Shopify 应用无法正常工作
Shopify app with proxy extension POST requests not working
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
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