我正在使用带有DynamoDB resolver
和Cognito
IAM auth
AppSync
。我正在尝试执行以下操作。
{
"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