shopify 应用程序代理:发送客户数据或仅发送客户 ID
shopify app proxy: send customer data or only customer ID
我需要为服务器端逻辑获取客户的姓名和电子邮件地址。
据我所知,有 2 个选项:
- 表单将请求正文中的数据提交给代理 URL
- 使用 URL 中的客户 ID 向代理 URL 发出 GET 请求,然后使用 shopify API 获取所有客户的信息
我倾向于使用选项 #1,因为它节省了对 Shopify 的调用,我将通过 https 发送数据。
你会如何建议这样做?
表示您可能会收到垃圾。传入的数据没有任何意义,因为机器人可以填写表格并提交。
至少意味着您有一个实际登录的客户。如果你有 ID,你也有来自 Liquid 的电子邮件和姓名。如果您的代理调用来自无法访问的脚本标记,您可以从秘密客户 ID cookie 值发送客户 ID,是的,进行 API 调用。这根本不是什么大不了的事情。
如果您要提交代理表单,您应该查看 Gavin Ballard's post 关于使用哈希验证客户的信息。
我在使用 application/liquid 响应应用程序代理时做了类似的事情。请参阅下面示例中的 reqHash 字段。这是通过 ejs 处理的,其标签不会与任何动态值的 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 年写这篇文章以来,我已经开始对隐藏输入中包含的所有信息进行哈希处理。
哈希保护您的应用免受黑客和无聊的脚本小子的侵害。
我需要为服务器端逻辑获取客户的姓名和电子邮件地址。
据我所知,有 2 个选项:
- 表单将请求正文中的数据提交给代理 URL
- 使用 URL 中的客户 ID 向代理 URL 发出 GET 请求,然后使用 shopify API 获取所有客户的信息
我倾向于使用选项 #1,因为它节省了对 Shopify 的调用,我将通过 https 发送数据。
你会如何建议这样做?
表示您可能会收到垃圾。传入的数据没有任何意义,因为机器人可以填写表格并提交。
至少意味着您有一个实际登录的客户。如果你有 ID,你也有来自 Liquid 的电子邮件和姓名。如果您的代理调用来自无法访问的脚本标记,您可以从秘密客户 ID cookie 值发送客户 ID,是的,进行 API 调用。这根本不是什么大不了的事情。
如果您要提交代理表单,您应该查看 Gavin Ballard's post 关于使用哈希验证客户的信息。
我在使用 application/liquid 响应应用程序代理时做了类似的事情。请参阅下面示例中的 reqHash 字段。这是通过 ejs 处理的,其标签不会与任何动态值的 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 年写这篇文章以来,我已经开始对隐藏输入中包含的所有信息进行哈希处理。
哈希保护您的应用免受黑客和无聊的脚本小子的侵害。