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

时间:2016-09-04 08:52:11

标签: shopify

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

我认为有两种选择:

  1. 使用代理网址的请求正文中的数据提交表单
  2. 使用URL中的客户ID获取对代理URL的请求,然后使用shopify API获取所有客户的信息
  3. 我倾向于使用选项#1,因为它保存了对Shopify的调用,我将通过https发送数据。

    你会怎么建议这样做?

2 个答案:

答案 0 :(得分:1)

如果您要提交代理表格,则应查看Gavin Ballard's post关于使用哈希验证客户的信息。

我做了类似的事情,我回复了使用application/liquid的app proxy get。请参阅下面示例中的reqHash字段。这通过ejs处理,其标签与任何动态值的液体都不冲突:

e.g。

{% 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 :(得分:0)

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

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