【问题标题】:"No 'Access-Control-Allow-Origin'" Error while sending JSON Request to Shopify向 Shopify 发送 JSON 请求时出现“无‘Access-Control-Allow-Origin’”错误
【发布时间】:2014-02-01 00:04:35
【问题描述】:

我有 Shopify 帐户。在管理员面板中,管理员可以将任意数量的产品添加到 Shopify 商店。

但我需要公众用户通过客户端从我的 Shopify 商店注册自定义产品。

我已经尝试了以下代码。

$('#send').click(function() {

        $.ajax({

                /* xxxx...  : Api key
                   yyyy...  : password */
            url: 'https://xxxxxxxxxxxxxxxxxxxxxxxxxx:yyyyyyyyyyyyyyyyyyyyyyy@testing.myshopify.com/admin/orders.json',
            type: 'POST',
            dataType: 'json',
            data: {
                  "product": {
                    "title": "Burton Custom Freestlye 151",
                    "body_html": "<strong>Good snowboard!</strong>",
                    "vendor": "Burton",
                    "product_type": "Snowboard",
                    "tags": "Barnes & Noble, John's Fav, \"Big Air\""
                  }
                },
            success: function(response) {

                alert(response);
            }

        });

    });

我收到以下错误:

XMLHttpRequest 无法加载 https://testing.myshopify.com/admin/orders.json。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许访问 Origin 'http://testing.myshopify.com'。

【问题讨论】:

标签: json shopify


【解决方案1】:

@迪娜。万一您错过了这种使用 Javascript 非常不安全

您正在公开您的 API 密钥,因此任何人都可以更改或删除您的整个商店。

改为创建一个私有应用程序,您可以正确控制安全性,并以受控方式使用 Javascript,而不会将您的 API 密钥暴露给外界。

如果您部署这样的不安全代码并且您的客户最终要对发生的非常糟糕的事情负责,您的声誉会以如此之快的速度被破坏,您会感到惊讶。

对于其他陷入此主题的人,您的前端 JS 可以通过调用 App Proxy 来完成此操作,提供安全性以及使用 RestAPI 或 GraphQL 方法进行处理的能力。

【讨论】:

  • 在某些情况下这是有效的。例如,如果您正在创建自己的应用程序,只有您将使用它来提取数据。 @大卫拉扎尔
  • 我不会反对你的幻想 Fabricio。我相信你可以想出许多你认为有效的东西,但它们的安全性会受到质疑,因此我的回答是。现在更正确的答案是前端 JS 调用 App Proxy。我没有指出这一点,所以我现在将编辑我的答案。
  • 太有趣了...“幻想”为什么要刺拳?例如,我正在为本地 adobe Illustrator 编写一个脚本,该脚本需要在本地提取一些数据以使用它。抱歉,我不知道你会因为评论而受到侮辱。 @大卫拉扎尔
  • OP 询问了 Shopify 的 JS。如果她按照自己的方式行事,那将是一场灾难。所以你的评论,除非是针对她的 Shopify 计划,而且我的建议是避开,否则没有任何价值。当然,你可以用任何东西做任何你想做的事,当然是脚本 Illustrator,但这与整个对话的关系为零,那为什么呢?
【解决方案2】:

这里的问题是您的来源是不安全的 (http://) 而资源是安全的 (https://)。这会导致浏览器将它们视为不同的域,并且由于您的资源 (orders.json) 未指定应允许来自 http:// 版本的 URL 的请求,因此请求失败,因为默认情况下跨域请求是出于安全考虑禁止使用。如果您通过 https:// 访问运行脚本的页面,您应该能够运行相同的脚本。

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 2018-08-26
    • 2017-08-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-28
    • 2021-03-17
    • 2017-12-30
    相关资源
    最近更新 更多