提问者:小点点

如何使用自定义NodeJS服务器安全地在Shopify store中显示额外的客户数据?


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

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

/accountliquid模板中,我使用的是Vue组件。它将处理对nodejsapi的请求(我使用的是feathers/express)。

到目前为止,我读到了关于应用程序代理和应用程序桥的内容,但我不知道这些内容在这里是否合适。

主要问题:

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

注意:我对Shopify真的是个新手。请详细解释。谢谢


共2个答案

匿名用户

  1. 使用Shopify CLI工具创建应用程序,使用命令Shopify node Create生成node JS one
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;
  };
};

匿名用户

这很容易。这个术语有点奇怪,但这里是所有你需要知道的。

  1. 在应用程序中设置应用程序代理

这将让您知道来电是安全的,并且来自Shopify。通话可以包括两个关键参数,即电子邮件和客户ID。

因此,您有一封电子邮件和一个ID。现在您可以安全地获取重要的客户帐户数据,并将其以JSON格式返回到前端的组件中。

那就是了。没有更多的了。玩得开心。