shopify应用程序代理:发送客户数据或仅发送客户ID

shopify应用程序代理:发送客户数据或仅发送客户ID,shopify,Shopify,我需要得到客户的名字和姓氏以及服务器端逻辑的电子邮件地址 在我看来,有两种选择: 表单将请求主体中的数据提交到代理URL 使用URL中的客户ID获取对代理URL的请求,然后使用shopify API获取所有客户信息 我倾向于使用选项#1,因为它节省了对Shopify的呼叫,我将通过https发送数据 你建议怎么做 暗示您可能会收到垃圾。由于机器人可以填写表单并提交,因此传入的数据毫无意义 至少意味着您有一个实际登录的客户。如果您有ID,您还可以从Liquid获得电子邮件和姓名。如果代理调用来自没

我需要得到客户的名字和姓氏以及服务器端逻辑的电子邮件地址

在我看来,有两种选择:

  • 表单将请求主体中的数据提交到代理URL
  • 使用URL中的客户ID获取对代理URL的请求,然后使用shopify API获取所有客户信息
  • 我倾向于使用选项#1,因为它节省了对Shopify的呼叫,我将通过https发送数据

    你建议怎么做

  • 暗示您可能会收到垃圾。由于机器人可以填写表单并提交,因此传入的数据毫无意义

  • 至少意味着您有一个实际登录的客户。如果您有ID,您还可以从Liquid获得电子邮件和姓名。如果代理调用来自没有类似访问权限的脚本标记,则可以从secret customer ID cookie值发送客户ID,是的,进行API调用。这没什么大不了的


  • 如果您正在提交代理表单,您应该检查一下如何使用散列验证客户

    我做了一些类似的事情,在那里我响应应用程序代理。请参见下面示例中的reqHash字段。这是通过ejs处理的,ejs的标记不会与任何动态值的liquid冲突:

    e、 g

    {%if customer%}
    电子邮件
    {%else%}
    名称
    电子邮件
    密码
    {%endif%}
    
    然后在发布表单时验证reqHash

    回应一项评论:

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

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


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

    我说的是从液体中提交表格。有一个签名处理,所以非shopify数据将被丢弃。shopify在他们的表单上添加签名处理当然,但这对你没有帮助。您的服务器端代码也需要执行该步骤。应用程序代理智能。或者也可以根据下面的答案编出来。谢谢你的片段,秘诀是什么?是定制液体吗?另外,不建议提交敏感信息,对吗?我想我只会提交客户ID和散列,并通过API调用获取所有需要的数据。custSecret只是为应用程序生成的随机值。我通过https提交信息,因此发布信息与任何电子商务应用程序一样安全。OK,我不控制我的应用程序的安装位置,因此我必须采取所有防护措施。这与你的应用程序的安装位置无关。这与你的应用程序从哪里提供服务有关。您应该从https端点为应用程序提供服务。
    {% 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 %}