ctx.identity.username returns null 的简单 GetItem
Simple GetItem with ctx.identity.username returns null
我正在使用 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
是应该 returns 用户数据的 Apollo query
。
我尝试过的:
- 如果我这样留下,
getUserLogged
returns null.
- 如果我用这样的已知
userId
替换解析器 $util.dynamodb.toDynamoDBJson($ctx.identity.username)
$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8")
:它有效!我得到了这个用户数据。
- 我尝试使用解析器页面中的测试工具,但它只提供虚假数据,所以我不能依赖它。
我是不是搞错了?对我来说一切都很好,但我想我错过了什么?
我能看清楚$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
我正在使用 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
是应该 returns 用户数据的 Apollo query
。
我尝试过的:
- 如果我这样留下,
getUserLogged
returns null. - 如果我用这样的已知
userId
替换解析器$util.dynamodb.toDynamoDBJson($ctx.identity.username)
$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8")
:它有效!我得到了这个用户数据。 - 我尝试使用解析器页面中的测试工具,但它只提供虚假数据,所以我不能依赖它。
我是不是搞错了?对我来说一切都很好,但我想我错过了什么?
我能看清楚$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