2

我正在使用AppSyncwithIAM auth和。我正在尝试执行以下操作。DynamoDB resolverCognito

{
    "version": "2017-02-28",
    "operation": "GetItem",
    "key": {
        "userId": $util.dynamodb.toDynamoDBJson($ctx.identity.username)
    }
}

$ctx.identity.username应该包含userId生成的Cognito,我正在尝试使用它来获取当前用户数据。

客户端,我正在使用AWS Amplify它告诉我我当前已登录:

this.amplifyService.authStateChange$.subscribe(authState => {
  if (authState.state === 'signedIn') {
    this.getUserLogged().toPromise();
    this._isAuthenticated.next(true);
  }
});

getUserLoggedApollo query应该返回用户数据的那个。

我试过的:

  • 如果我这样离开它,则getUserLogged返回 null。
  • 如果我用这样$util.dynamodb.toDynamoDBJson($ctx.identity.username)的已知名称替换解析器:它可以工作!我得到了这个用户数据。userId$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8")
  • 我尝试在解析器页面中使用测试工具,但它只提供假数据,所以我不能依赖它。

我犯错了吗?对我来说,一切看起来都不错,但我想我错过了什么?

我可以清楚地看到$ctx.identity包含的内容吗?

4

1 回答 1

3

您将要用于$ctx.identity.cognitoIdentityId识别 Cognito IAM 用户: https ://docs.aws.amazon.com/appsync/latest/devguide/resolver-context-reference.html#aws-appsync-resolver-context-reference-identity

您可以$ctx.identity通过创建 Lambda 解析器并记录事件或通过创建本地解析器并返回映射模板接收的输入来查看内容: https ://docs.aws.amazon.com/appsync/latest/devguide/tutorial -local-resolvers.html

我的cognitoIdentityId样子是这样的:eu-west-1:27ca1e79-a238-4085-9099-9f1570cd5fcf

于 2018-07-08T10:11:07.867 回答