ctx.identity.username returns null 的简单 GetItem

Simple GetItem with ctx.identity.username returns null

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

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

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

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

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

getUserLogged 是应该 returns 用户数据的 Apollo query

我尝试过的:

我是不是搞错了?对我来说一切都很好,但我想我错过了什么?

我能看清楚$ctx.identity包含的内容吗?

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

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

我的 cognitoIdentityId 看起来像这样:eu-west-1:27ca1e79-a238-4085-9099-9f1570cd5fcf