[英]AWS AppSync conditional update with dynamodb resolver
尝试使用Appsync dynamodb解析器有条件地更新dynamodb中的项目。 在通过“应用同步查询”面板测试条件更新时,即使提供了错误的用户名,操作也会继续进行,并使用price和ModifyDate的新值更新数据库。 这是解析器的代码:
{
"version" : "2017-02-28",
"operation" : "UpdateItem",
"key" : {
"id": $util.dynamodb.toDynamoDBJson($ctx.args.input.id)
},
"update" : {
"expression" : "SET price = :price, modificationDate = :newDate",
"expressionValues": {
":price" : { "N": $context.arguments.input.price },
":newDate": $util.dynamodb.toDynamoDBJson($util.time.nowISO8601())
}
},
"condition" : {
"expression" : "username = :expectedOwner",
"expressionValues" : {
":expectedOwner" : { "S" : "${context.identity.username}" }
}
}
}
条件表达式中是否有任何错误?
在我的头顶,您的映射模板看起来正确。 需要检查的几件事:
->更改"id": $util.dynamodb.toDynamoDBJson($ctx.args.input.id)
->更改"id": $util.dynamodb.toDynamoDBJson($ctx.args.input.id)
"id": $util.dynamodb.toStringJson($ctx.args.input.id)
->下面是使用Cognito用户池身份验证与条件检查一起使用的映射模板的示例。 对于Cognito身份/ AWS IAM,也应该相同。
{
"version" : "2017-02-28",
"operation" : "UpdateItem",
"key" : {
"id": $util.dynamodb.toStringJson($ctx.args.id)
},
"update" : {
"expression" : "SET title = :title, modificationDate = :newDate, content = :content",
"expressionValues": {
":title" : $util.dynamodb.toStringJson($ctx.args.title),
":newDate": $util.dynamodb.toStringJson($util.time.nowISO8601()),
":content": $util.dynamodb.toStringJson($ctx.args.content)
}
},
"condition" : {
"expression" : "#sub = :expectedOwner",
"expressionNames" : { "#sub": "sub" },
"expressionValues" : {
":expectedOwner" : { "S" : "${context.identity.sub}" }
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.