如何使用自定义NodeJS服务器在Shopify商店安全地显示额外的客户数据? [英] How to display extra customer data in Shopify store using a custom NodeJS server securely?
本文介绍了如何使用自定义NodeJS服务器在Shopify商店安全地显示额外的客户数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
目标是在/account
中安全地显示自定义客户数据。
用户需要登录Shopify商店才能访问该路线。
数据绑定到服务器中客户的电子邮件地址。因此,我将在请求URL中使用电子邮件地址执行GET请求。
在/account
液体模板中,我使用的是Vue组件。它将处理对NodeJS API的请求(我使用的是FEETHES/EXPRESS)。
到目前为止,我读到有关App Proxy和App Bridge的内容,但我不知道它们在这里如何适用。
主要问题:
如何保护API以确保只有登录的Shopify客户才能在商店内获取他们自己的数据?如何验证用户并确保只能通过应用商店访问API?
注意:我对Shopify非常陌生。请详细解释一下。谢谢。
推荐答案
- 使用Shopify CLI工具创建APP,使用命令
shopify node create
生成Node JS One。 - 生成的应用程序包括
auth/callback
,该应用程序需要auth/callback
才能在Shopify应用商店上安装。使用此CLI,它还可以在Partner Dashboard上执行初始设置。 - 我们可以使用将启动
ngrok
服务器的shopify node serve
启动Node应用程序,并在App Setup中更新应用程序的URL。然后,您需要通过复制URL并将其放入App Setup来设置App Proxy。 - 通过使用App Proxy,Shopify将使用添加到您的应用/服务器的签名重新路由通过Shopify后端的呼叫(&Q;;&Q;),因此我们知道呼叫是安全的,并且是正确的呼叫。
- 然后我们可以验证来自Shopify的URL查询中的签名。下面是用JS重写的code from Ruby。我正在将它用作我的Fetters JS服务中的挂钩。
const { NotAuthenticated } = require('@feathersjs/errors');
const crypto = require('crypto');
const safeCompare = require('safe-compare');
module.exports = () => {
return async context => {
const { query } = context.params;
const signature = query.signature;
delete query.signature;
let sortedParams = '';
for (const [key, value] of Object.entries(query).sort()) {
sortedParams += `${key}=${value}`;
}
const calculatedSignature = crypto
.createHmac('sha256', process.env.SHOPIFY_API_SECRET)
.update(sortedParams, 'utf-8')
.digest('hex');
if (!safeCompare(calculatedSignature, signature)) {
throw new NotAuthenticated();
}
return context;
};
};
这篇关于如何使用自定义NodeJS服务器在Shopify商店安全地显示额外的客户数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文