Amazon AWS Cognito Lambda 触发器无法使用简单的 PHP BREF 函数

Amazon AWS Cognito Lambda Triggers Not Working With Simple PHP BREF Function

我最近开始尝试使用 bref (https://bref.sh/docs/) 包在 Amazon AWS 上将 PHP 用于 Lambda 函数。我可以完美地使用这个包来上传一个简单的 Lambda 函数,尽可能简单:

<?php

require __DIR__.'/vendor/autoload.php';

lambda(function ($event) {
    return $event;
});

然后我使用这个 Lambda 函数并开始将其分配给 Cognito 触发器。它非常适合预注册触发器,当我从 Cognito 的管理面板创建新帐户时完全没有问题。

然而,当我采用完全相同的触发器并将其添加到预身份验证 Cognito 触发器,然后使用简单的 Symfony 应用程序对其进行测试时,我在本地 运行 充当使用 Cognito 的简单身份验证机制(使用本教程开发:https://tech.mybuilder.com/managing-authentication-in-your-symfony-project-with-aws-cognito/),它立即 returns 错误:

Error executing "AdminInitiateAuth" on "https://cognito-idp.us-east-2.amazonaws.com"; AWS HTTP error: Client error: `POST https://cognito-idp.us-east-2.amazonaws.com` resulted in a `400 Bad Request` response:
{"__type":"InvalidLambdaResponseException","message":"Unrecognizable lambda output"}
InvalidLambdaResponseException (client): Unrecognizable lambda output - {"__type":"InvalidLambdaResponseException","message":"Unrecognizable lambda output"}

当我禁用上面的 lambda 时,它会立即开始正常工作,所以问题不在于我的 Symfony 应用程序,而在于 lambda(即使它只是返回给定的事件并适用于其他触发器,如上所述)。

即使我用一个在 Node 中基本上等效的简单 lambda 替换它,它也能正常工作:

exports.handler = async (event) => {
    return event;
};

有谁知道为什么 PHP lambda 似乎无法与 Cognito 预身份验证触发器一起使用?如果可能,我更愿意在 PHP 中执行此操作。

问题在于将 $event 转换为 JSON。这两个事件的 lambda 期望:

"response": {}

并且 bref 是 returning

"response": []

这是对 AWS 的无效响应。所以要破解它。最快的方法是设置

$event['response'] = ['property' => 'name']

强制 bref 到 return:

"respose": {"property":"name"}