【发布时间】:2018-12-16 05:30:19
【问题描述】:
我将AppSync 与IAM auth 与DynamoDB resolver 和Cognito 一起使用。我正在尝试执行以下操作。
{
"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)替换为已知的userId,就像这样$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8"):它可以工作!我得到了这个用户数据。 - 我尝试使用解析器页面中的测试工具,但它只提供虚假数据,因此我不能依赖它。
我做错了吗?在我看来一切都很好,但我想我错过了什么?
我可以清楚地看到$ctx.identity 包含的内容吗?
【问题讨论】:
标签: amazon-dynamodb amazon-cognito aws-appsync aws-amplify vtl