带有 ctx.identity.username 的简单 GetItem 返回 null



我正在使用带有DynamoDB resolverCognitoIAM authAppSync。我正在尝试执行以下操作。

{
"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是应该返回用户数据的Apollo query

我尝试过:

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

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

我可以清楚地看到$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

最新更新