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命中301,然后Shopify使用以下类似的/缺失参数向原始URL创建GET请求:
shop: example.myshopify.com
path_prefix: /apps/wishlist
timestamp: 1585769299
signature: examplesignature
如果我将原始AJAX请求更改为GET,那么我的原始参数将按预期方式传递。
这里不允许POST请求吗?
答案 0 :(得分:1)
尝试将/
添加到url
的末尾,即将其更改为/apps/wishlist/save/
。
答案 1 :(得分:0)
只是为了澄清。
Vladimir answer 有效,为什么?
Shopify 似乎更改了某些 POST 请求的身份验证流程。
您必须发送不带 cookie 的请求,或者您可以发送带有 X-Shopify-Access-Token
标头的请求并使用您的应用程序密码。它们应该都可以工作,但是在某些使用情况下,不允许您在没有 cookie 的情况下发送请求或仅使用基本身份验证(取决于您用于发送请求的方法和软件)。 Shopify 的开发者当然不是疯了,这是为了避免某种基于特定攻击方法的黑客攻击而实施的,但也许最好在他们的文档中明确说明。即使上面解释的解决方案应该是首选的,因为它在某些情况下不起作用,所以 Vladimir 's solution 是一个有效的替代方案(您也可以在 URL 末尾添加一个点,例如:www.example .com./etc/etc),这是因为这种方式“阻止”了 cookie 播种。
您可以在 Sopify 的社区讨论后了解更多相关信息 here