I'm using AppSync
with IAM auth
with a DynamoDB resolver
and Cognito
. I'm trying to do the following.
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"userId": $util.dynamodb.toDynamoDBJson($ctx.identity.username)
}
}
$ctx.identity.username
is supposed to contain userId
generated by Cognito
and I'm trying to use it to fetch current user data.
Client side, I'm using AWS Amplify
that tells me I'm currently logged:
this.amplifyService.authStateChange$.subscribe(authState => {
if (authState.state === 'signedIn') {
this.getUserLogged().toPromise();
this._isAuthenticated.next(true);
}
});
getUserLogged
is the Apollo query
that is supposed to returns user data.
What I've tried:
- If I leave it like this,
getUserLogged
returns null. - If I replace in the resolver
$util.dynamodb.toDynamoDBJson($ctx.identity.username)
with a knownuserId
like this$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8")
: It works! I get this user data. - I tried to use the test tool in the resolver page but it only gives fake data so I can't rely on this.
Did I make a mistake? To me everything looks good but I guess I'm missing something?
Can I clearly see what $ctx.identity
contains?