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

时间:2018-07-08 08:31:17

标签: amazon-dynamodb amazon-cognito aws-appsync aws-amplify vtl

我正在将AppSyncIAM authDynamoDB resolver一起使用。我正在尝试执行以下操作。

Cognito

{ "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); } }); 是应该返回用户数据的getUserLogged

我尝试过的事情:

  • 如果我这样离开,Apollo query返回null。
  • 如果我在解析器getUserLogged中替换为已知的$util.dynamodb.toDynamoDBJson($ctx.identity.username),例如userId,那就可以了!我得到了这个用户数据。
  • 我尝试在解析器页面中使用测试工具,但它仅提供伪造数据,因此我不能依靠它。

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

我可以清楚地看到$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8")包含什么吗?

1 个答案:

答案 0 :(得分:1)

您将要使用$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