我正在开发一个Zapier应用程序,并且在身份验证期间检索我需要在触发器中使用的租户ID(整数)。这样做的正确方法是什么?
我尝试过使用global,bundle.authData并将数据存储在模块中,但似乎没有任何工作能够保持一致。最好的情况是我将数据存储在全局中,但它是不一致的,在六次调用触发器中,租户id可能只有两次有效,另外四次它将作为undefined返回。
在全局的情况下,我在身份验证期间写入数据:
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() {
// ...
我也尝试将数据添加到'bundle.authData',这是Zapier在我联系他们时提出的建议,但我在身份验证期间添加了租户ID:
bundle.authData.tenant = response.json.tenant
当我尝试在触发器中检索它时不可用。仅存在“用户名”和“密码”。
我是Zapier和node.js的新手,所以任何帮助都将不胜感激。
答案 0 :(得分:1)
请使用类似bundle.authData.tenant = response.json.tenant
的内容,而不是返回tenant = response.json.tenant
之类的完全限定名称,并且此语句最好应包含在return
语句中。 Zapier会自动应用bundle.authData
限定符。
global
个变量。希望这会有所帮助。
答案 1 :(得分:0)
David来自Zapier平台团队。
global
无法正常工作,因为您的代码在多个lambda执行中运行,并且状态不存储在它们之间。此外,全球意味着它对所有用户都是一样的,这可能不是你想要的。
相反,我会查看session auth,这样您就可以在测试期间通过创建计算字段并从sessionConfig.perform
返回值来存储额外字段。然后它将存储在auth对象中,旁边是用户名和密码。
另外,您可能需要考虑processTransactions
中的任何代码。要么你可以全部归还它们,它们会在我们的最后重复,或者你做了一堆更好的dehydrated额外计算。这只是我的一个猜测,所以请随意忽略这一部分。