使用 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 输入类型