我正在将AppSync
与IAM auth
和DynamoDB 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")
包含什么吗?
答案 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