PreTokenGeneration无法识别的lambda输出

时间:2020-07-17 05:37:42

标签: amazon-web-services aws-lambda amazon-cognito

我试图在身份令牌中添加一个帐户属性,但是当我从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日志告诉我一切都很好。

1 个答案:

答案 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