AWS Cognito触发Lambda时出现自定义错误。

3
有没有一种方法可以自定义Cognito触发Lambda的错误信息?
export async function handler(event: PreSignUpTriggerEvent, context: Context, callback: Callback<PreSignUpTriggerEvent>): Promise<void> {
    console.log(event);
    // Return to Amazon Cognito
    callback(message, event);            
}

这将返回以下错误到我的回调URL。
http://localhost:3000/?error_description=PreSignUp+failed+with+error+Error%3A+User+not+exists+in+the+system.+Access+deny.+&error=invalid_request

我知道不可能更改error_description以删除前缀PreSignUp+failed+with+error (参考链接)。

不过,是否可以自定义error=invalid_request查询参数为error=access_denied或任何自定义错误而不是invalid_request

1个回答

1
你可以使用这个链接作为基础示例,并返回一个常量来识别客户端错误:

enter image description here

https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-sign-up.html

示例:
const error = new Error("EMAIL_MISSING");
callback(error, event);

更新

就像@srx所说的那样:Cognito的响应将通过查询字符串返回由他们描述的错误加上您的常量,如下所示: error_description=PreSignUp+failed+with+error+EMAIL_MISSING

因此,您可以在客户端进行检查。在下面的React应用程序片段中,我已经这样做了:

const locationSearch = String("error_description=PreSignUp+failed+with+error+EMAIL_MISSING");
const isAzureError = locationSearch.includes('AZURE_IDP_ERROR');
const isEmailMissing = locationSearch.includes('EMAIL_MISSING');

1
没错。在客户端,您可以检查error_description中是否有此常量。 - Fábio Filho
我们想知道的是是否有一种方法可以删除error_description中的前缀,或者使用自定义错误代替error=invalid_request - srx
1
这更像是我已经实现的一种解决方法。然而,它并不是一个很好的解决方案,因为它涉及到字符串解析,而不是使用参数值。前缀也取决于触发 Lambda 类型。没有规定前缀格式的文档,因此存在风险会发生变化。 - lipeiran
1
@srx,我没有找到类似的解决方案,所以我做了这个变通方法。 - Fábio Filho
2
说实话,Cognito服务在很多方面都不是非常灵活,这让工作变得有些复杂。 - Fábio Filho
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接