我正在重构一个在google script 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‘”错误。我认为这是因为用户还不存在。
提前谢谢。
发布于 2021-02-01 23:10:32
解决方案:
每个创建的用户都需要先生成验证码。因为这是一个脚本,所以您可以在列出之前使用AdminDirectory.VerificationCodes.generate
来完成此操作。
示例:
function generateKeys() {
AdminDirectory.VerificationCodes.generate("dummyemail@dummy.com");
var keys = AdminDirectory.VerificationCodes.list("dummyemail@dummy.com").items[0].verificationCode;
console.log(keys);
}
这应该会在执行日志中显示一个数字键,而不是undefined
。
参考资料:
发布于 2021-02-02 00:01:44
你得到这个错误是因为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
https://stackoverflow.com/questions/65992312
复制相似问题