使用 AWS AppSync 进行输入验证

Posted

技术标签:

【中文标题】使用 AWS AppSync 进行输入验证【英文标题】:Input validation with AWS AppSync 【发布时间】:2019-04-22 14:36:34 【问题描述】:

是否可以在不添加另一个交互“层”的情况下?

我觉得添加一个 lambda 函数会破坏它的目的。

我想要完成的是至少对字符串进行一些正则表达式验证。

如果不是,那么使用 AppSync 或类似解决方案 (firebase) 的人如何做到这一点?

【问题讨论】:

【参考方案1】:

如果它只是正则表达式验证而无需根据数据源中的数据检查输入,那么您可以在解析器请求映射模板中预先添加一些验证逻辑。

请参阅下面的示例,以检查输入字段是否匹配来自myvaliddomain.com 的电子邮件。如果它不验证,我们只是中止并出错该字段。

#set($valid = $util.matches("^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com", $ctx.args.input))
#if (!$valid)
    $util.error("$ctx.args.input is not a valid email.", "ValidationError")
#end

## Rest of your request mapping template below

【讨论】:

谢谢,这正是我想要的。如果您不介意,还有一个问题:由于$util.matches 的第一个参数是一个字符串,是否可以从数据库本身获取该正则表达式模式? 由于您现在必须将多个数据源连接到单个 GraphQL 字段,因此您可以使用管道解析器。您的管道解析器将由两个函数组成,第一个函数将使用 GetItem 操作从 DynamoDB 中检索正则表达式模式并在响应映射模板中进行验证,第二个函数仅在第一个函数成功时才会实际运行另一个操作.查看docs.aws.amazon.com/appsync/latest/devguide/… 了解完整说明。 @SamuelE。尝试使用本文所述的“包装器模式”:hackernoon.com/…。这将为您节省大量代码冗余。

以上是关于使用 AWS AppSync 进行输入验证的主要内容,如果未能解决你的问题,请参考以下文章

我可以在Aws AppSync解析器映射模板中对用户输入进行消毒吗?

AWS Appsync Javascript 查询示例和输入语法

在 Graphql 操场上使用 AWS Cognito 用户池对 AppSync 突变进行身份验证

AWS-CDK Appsync Codefirst 输入类型

具有公共/私有访问权限的 Appsync 身份验证,无需 AWS Cognito

当 AWS AppSync 使用 Cognito 时如何验证 Lambda 生成的突变