首页 > 解决方案 > 从新创建的帐户中检索 8 位代码的鸡和蛋情况

问题描述

我正在重构一个在谷歌脚本 G-Suite API 上创建新用户帐户的脚本。

该脚本运行良好,并准备了带有登录凭据的电子邮件模板——一切都符合预期。

我没有尝试检索 8 位验证码,并将其附加到电子邮件模板,因为我们已移至所需的 2FA 组织范围。

问题的关键是,如果没有创建帐户,我自然无法获取代码。似乎有一些问题 - 某种类型的延迟,我无法足够快地获取代码?不完全确定。我得到了一些关于如何使用这个简单的变量声明来检索代码的帮助:

AdminDirectory.VerificationCodes.list('donald.duck@example.com').items[0].verificationCode;

可以想象,问题是 donald.duck 还不是用户 =)

我即将放弃,只是创建另一个脚本,发送一封带有 8 位代码的后续电子邮件。

有谁熟悉这个API,这个问题?

我尝试使用上述声明设置所有类型的变量,并将其放置在当前脚本中的所有位置 - 即使在创建用户之后:

user = AdminDirectory.Users.insert(result.user);

但是,它总是返回“错误消息:无法读取未定义的属性'0'”错误。我认为这是因为用户还不存在。

提前致谢。

标签: javascriptgoogle-apps-script

解决方案


你得到那个错误是因为items数组是空的。在获取假定存在的值之前,首先检查该元素是否存在。

// Mock AdminDirectory
const AdminDirectory = {
  VerificationCodes: {
    list: (userId) => {
      const codes = [{
        userId: 'user@example.com',
        verificationCode: 'code1',
      }, {
        userId: 'user@example.com',
        verificationCode: 'code2',
      }];
      return { items: codes.filter(c => c.userId === userId) };
    },
  }
};

const response = AdminDirectory.VerificationCodes.list('user1@example.com');

// Check if the `items` array has anything before accessing the value
const code = response.items.length > 0 ? response.items[0].verificationCode : null;

console.log(code); // null


推荐阅读