使用 Amplify 将 lambda 解析器限制为 GraphQL API 的所有者

问题描述 投票:0回答:2

在我的

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

graphql aws-amplify
2个回答
0
投票

所以根据我的GitHub问题的回复,目前不支持这个工作流程。您可以在这里关注:https://github.com/aws-amplify/amplify-category-api/issues/528#issuecomment-1157894170

解决方法由以下人员提供:

...将身份验证规则设置为私有,然后执行 lambda 函数中的验证...

我正在考虑创建一个自定义身份验证函数,然后将其链接在我的自定义突变前面。不确定这是否有效,但一旦取得一些进展,我会报告。


0
投票

这仍然是一个问题。设置它

private
并使用 lambda 授权更新
custom-roles.json
就可以了;但是,我无法获得仅将数据推送到
owner
的订阅。由于
private
是最严格的模式,我的所有授权用户都会获得订阅数据。有人搞清楚这个了吗?

© www.soinside.com 2019 - 2024. All rights reserved.