【问题标题】:Transfer data from Zapier authentication to trigger从 Zapier 身份验证传输数据以触发
【发布时间】:2018-09-13 18:10:31
【问题描述】:

我正在开发一个 Zapier 应用程序,并且在身份验证期间检索了一个租户 ID(整数),我需要在触发器中使用它。这样做的正确方法是什么?

我尝试过使用全局、bundle.authData 并将数据存储在一个模块中,但似乎没有什么能始终如一地工作。最好的情况是当我将数据存储在全局中时,但它是不一致的,在对触发器的六次调用中,租户 ID 可能只有两次有效,其他四次将返回为未定义。

在全局的情况下,我在身份验证期间写入数据:

const test = (z, bundle) => {

  return z.request({
      url: URL_PATH + ':' + URL_PORT + '/v1/auth',
      params: {
          username: bundle.authData.username,
          password: bundle.authData.password
      }
  }).then((response) => {
    if (response.status === 401) {
      throw new Error('The username and/or password you supplied is incorrect.');
    } else {
      global.GLOBAL_tenant = response.json.tenant;
      // ...
    }
}

然后尝试在触发器中读回数据:

const processTransactions = (z, bundle) => {

  let jsonAll = [];
  let tenant  = global.GLOBAL_tenant;

  return new Promise( (resolve, reject) => {
    (function loop() {
    // ...

我也尝试将 dat 添加到 'bundle.authData',这是 Zapier 在联系他们时提出的建议,但我在身份验证期间添加的租户 ID:

bundle.authData.tenant = response.json.tenant

当我尝试在触发器中检索它时不可用。只有“用户名”和“密码”存在。

我是 Zapier 和 node.js 的新手,因此我们将不胜感激任何帮助。

【问题讨论】:

    标签: node.js zapier


    【解决方案1】:

    请使用tenant = response.json.tenant 之类的名称,而不是返回像bundle.authData.tenant = response.json.tenant 这样的完全限定名称,并且此语句最好包含在return 语句中。 Zapier 自动应用bundle.authData 限定符。

    global 应避免使用变量。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      David 来自 Zapier 平台团队。

      global 不起作用,因为您的代码在多个 lambda 执行中运行,并且它们之间没有存储状态。另外,全局意味着它对所有用户都是一样的,这可能不是你想要的。

      相反,我会查看session auth,它可以让您在测试期间通过创建一个计算字段并从sessionConfig.perform 返回值来存储额外的字段。然后它将存储在 auth 对象中,在用户名和密码旁边。

      另外,您可能需要考虑processTransactions 中的任何代码。要么您可以将它们全部归还,然后我们将对其进行重复数据删除,或者您正在做一堆更好的额外计算dehydrated。不过这只是我的猜测,所以请随意忽略这部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 2020-12-03
        • 2015-03-17
        • 2016-04-26
        • 2022-01-23
        • 2016-12-27
        • 2021-04-28
        • 1970-01-01
        相关资源
        最近更新 更多