shopify app proxy:发送客户数据或仅发送客户ID



我需要为服务器端逻辑获取客户的姓名和电子邮件地址。

我看到有两个选项:

  1. 表单将请求正文中的数据提交到被代理的URL
  2. GET请求到URL中带有客户ID的代理URL,然后使用shopify API获取所有客户的信息

我倾向于使用选项#1,因为它节省了对Shopify的调用,我将通过https发送数据。

你建议怎么做?

如果您正在提交代理表单,您应该查看Gavin Ballard关于使用散列验证客户的帖子。

我做了类似的事情,我用application/liquid响应应用程序代理get。请参阅下面示例中的reqHash字段。这是通过js处理的,这些js的标签在任何动态值上都不与liquid冲突:

{% if customer %}
    <input name="firstName" id="firstName" type="hidden" value="{{customer.first_name}}">
    <input name="lastName" id="lastName" type="hidden" value="{{customer.last_name}}">
    <input name="defaultAddr" type="hidden" value="{{ customer.default_address.id }}">
    <input type="hidden" name="custid" value="{{customer.id}}">
    <input type="hidden" name="reqHash" value="{{customer.id | append: '<%= custSecret %>' | md5}}"> 
    <div class="form-group">
        <label for="emailAddress">Email</label>
        <input name="emailAddress" id="emailAddress" type="text" value="{{customer.email}}" placeholder="Email">
    </div>
{% else %}
<div class="form-group">
    <label for="firstName">Name</label>
    <input name="firstName" id="firstName" type="text" value="" placeholder="First Name">
    <input name="lastName" id="lastName" type="text" value="" placeholder="Last Name">
</div>
<div class="form-group">
    <label for="emailAddress">Email</label>
    <input name="emailAddress" id="emailAddress" type="text" value="" placeholder="Email">
</div>
<div class="form-group">
    <label for="CreatePassword" class="hidden-label">Password</label>
    <input type="password" name="customer[password]" id="CreatePassword" class="input-full" placeholder="Password">
</div>
{% endif %}

,然后在发布表单时验证reqHash。

回应评论:

问题是你想对谁保密什么。客户已经知道他们的信息。Shopify维护会话,因此他们相信信息与正确的id相关联。SSL是一种安全传输,因此客户信息只在浏览器中是清晰的。散列让应用程序确保客户信息与正确的id相关联。这是应用验证登录的方式。否则,不良行为者可以向应用程序发送任意信息。写他们会从id中查找客户信息的发布者仍然需要验证id,以便他们知道他们拥有有效登录客户的正确id。

事实上,自从我写这篇2016年的文章以来,我已经开始对隐藏输入中包含的所有信息进行哈希。

哈希可以保护你的应用免受黑客和无聊的脚本小子的攻击。

  1. 暗示您可能会收到垃圾。传入的数据没有任何意义,因为机器人可以填写表单并提交。

  2. 至少意味着您有一个实际登录的客户。如果你有ID,你也有来自Liquid的电子邮件和名字。如果您的代理调用来自没有这样访问权限的脚本标记,则可以从秘密客户ID cookie值发送客户ID,然后进行API调用。这没什么大不了的。

最新更新