如何使用自定义NodeJS服务器在Shopify商店安全地显示额外的客户数据? [英] How to display extra customer data in Shopify store using a custom NodeJS server securely?

查看:9
本文介绍了如何使用自定义NodeJS服务器在Shopify商店安全地显示额外的客户数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

目标是在/account中安全地显示自定义客户数据。 用户需要登录Shopify商店才能访问该路线。

数据绑定到服务器中客户的电子邮件地址。因此,我将在请求URL中使用电子邮件地址执行GET请求。

/account液体模板中,我使用的是Vue组件。它将处理对NodeJS API的请求(我使用的是FEETHES/EXPRESS)。

到目前为止,我读到有关App Proxy和App Bridge的内容,但我不知道它们在这里如何适用。

主要问题:

如何保护API以确保只有登录的Shopify客户才能在商店内获取他们自己的数据?如何验证用户并确保只能通过应用商店访问API?

注意:我对Shopify非常陌生。请详细解释一下。谢谢。

推荐答案

  1. 使用Shopify CLI工具创建APP,使用命令shopify node create生成Node JS One。
  2. 生成的应用程序包括auth/callback,该应用程序需要auth/callback才能在Shopify应用商店上安装。使用此CLI,它还可以在Partner Dashboard上执行初始设置。
  3. 我们可以使用将启动ngrok服务器的shopify node serve启动Node应用程序,并在App Setup中更新应用程序的URL。然后,您需要通过复制URL并将其放入App Setup来设置App Proxy。
  4. 通过使用App Proxy,Shopify将使用添加到您的应用/服务器的签名重新路由通过Shopify后端的呼叫(&Q;;&Q;),因此我们知道呼叫是安全的,并且是正确的呼叫。
  5. 然后我们可以验证来自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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆