我试图在身份令牌中添加一个帐户属性,但是当我从Web应用程序运行它时,却给我带来了麻烦。
我一直在用测试事件测试lambda,并且它可以正常工作,我不知道可能是什么问题,我已经尝试将响应更改为回调和上下文,但它们也不起作用。 / p>
我正在使用无服务器框架安装此触发器,我还有另一个具有完全相同设置的PostConfirmation触发器,它可以正常工作。给我麻烦的是PreTokenGeneration。
我在函数中附加了我正在使用的代码:
module.exports.execute = async (event, context) => {
const { sub } = event.request.userAttributes;
const getUserQuery = {
TableName: `my-table`,
Key: { id: sub }
};
try {
const data = await dynamoDb.get(getUserQuery).promise();
console.log("DEBUG: query data", data);
const account = data.Item.accounts.find(
account => account.id === data.Item.currentAccountId
);
event.response = {
claimsOverrideDetails: {
claimsToAddOrOverride: {
account: account
}
}
};
console.log("OUTPUT: ", event);
return event;
} catch (error) {
console.log("ERROR:", error);
throw Error(
JSON.stringify({
error: error.message
})
);
}
};
这是它在我的Web应用程序中给我的错误
{"__type":"InvalidLambdaResponseException","message":"Unrecognizable lambda output"}
我可能做错了什么?我不知道还能看什么,lambda日志告诉我一切都很好。
答案 0 :(得分:0)
account
似乎是一个对象;当前,数组和对象不能与ClaimsToAddOrOverride一起使用,只能与字符串键值对一起使用。
尝试通过字符串化或使用多个键(例如,
)来展平结构claimsOverrideDetails: {
claimsToAddOrOverride: {
accountId: account.id,
accountName: account.name
...
}
}
相关:How to add array values in Claims of IdToken in Cognito using claimsToAddOrOverride