在我的
schema.graphql
文件中,我有以下内容:
type Floorplan @model @auth(rules: [
{ allow: private, operations: [read], provider: userPools },
{ allow: owner, provider: userPools }
]) @aws_cognito_user_pools {
id: ID! @primaryKey
name: String!
bedrooms: Int!
}
input FloorplanInput {
id: ID!
name: String!
bedrooms: Int!
}
type Mutation {
floorplanLambda(input: FloorplanInput): Floorplan
@function(name: "floorplanLambda-${env}")
@aws_cognito_user_pools
}
我创建了 lambda 函数来在更新之前执行自定义验证。 问题是任何经过身份验证的用户都可以更新其他用户的平面图。我以为添加
@aws_cognito_user_pools
可以解决这个问题,但事实并非如此。
问题:我需要添加什么来锁定
floorplanLambda
函数,使其只能由Floorplan模型的所有者成功调用?
调用
floorplanLambda
时,我收到错误:“未授权访问 Floorplan 类型上的 FloorplanLambda”。我正在使用 authMode AMAZON_COGNITO_USER_POOLS
拨打电话。
对于更多上下文,我按照本教程创建了自定义突变 lambda 函数:https://www.theclouddeveloper.io/use-lambda-resolvers-in-your-graph-ql-api-with-aws-amplify
所以根据我的GitHub问题的回复,目前不支持这个工作流程。您可以在这里关注:https://github.com/aws-amplify/amplify-category-api/issues/528#issuecomment-1157894170
解决方法由以下人员提供:
...将身份验证规则设置为私有,然后执行 lambda 函数中的验证...
我正在考虑创建一个自定义身份验证函数,然后将其链接在我的自定义突变前面。不确定这是否有效,但一旦取得一些进展,我会报告。
这仍然是一个问题。设置它
private
并使用 lambda 授权更新 custom-roles.json
就可以了;但是,我无法获得仅将数据推送到 owner
的订阅。由于 private
是最严格的模式,我的所有授权用户都会获得订阅数据。有人搞清楚这个了吗?