Amazon AWS Cognito lambda 触发器不适用于简单的 PHP BREF 函数



我最近开始尝试使用 bref (https://bref.sh/docs/( 包在 Amazon AWS 上使用 PHP for 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/(充当简单的身份验证机制,它会立即返回错误:

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(即使它只是返回给定的事件并适用于其他触发器,如上所述(。

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

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

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

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

"response": {}

布雷夫正在回归

"response": []

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

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

要强制 BREF 返回:

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

对我来说,它是这样工作的:

public function handle($event, Context $context): mixed
{
...
//hack, because bref lambda trigger doesn't support 'response' key as an array
$event['response'] = (object) [];
return $event;
}

最新更新