【问题标题】:Amazon AWS Cognito Lambda Triggers Not Working With Simple PHP BREF FunctionAmazon AWS Cognito Lambda 触发器无法使用简单的 PHP BREF 函数
【发布时间】:2020-05-19 06:27:53
【问题描述】:

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

<?php

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

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

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

但是,当我采用相同的确切触发器并将其添加到 Pre-authentication Cognito 触发器时,然后使用我在本地运行的简单 Symfony 应用程序对其进行测试,以充当使用 Cognito 的简单身份验证机制(使用本教程开发:@ 987654322@),它立即返回错误:

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 中执行此操作。

【问题讨论】:

    标签: aws-lambda amazon-cognito bref


    【解决方案1】:

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

    "response": {}
    

    并且 bref 正在返回

    "response": []
    

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

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

    强制 bref 返回:

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

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 2023-01-01
      • 2018-01-15
      • 2020-02-15
      • 2022-07-21
      • 2021-08-06
      • 2020-06-06
      • 2019-06-12
      • 2017-12-03
      相关资源
      最近更新 更多