Я использую 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
, который должен возвращать пользовательские данные.
Что я пробовал:
- Если я оставлю это так,
getUserLogged
вернет null. - Если я заменю в резолвере
$util.dynamodb.toDynamoDBJson($ctx.identity.username)
известнымuserId
вот так$util.dynamodb.toDynamoDBJson("b1ad0902-2b70-4abd-9acf-e85b62d06fa8")
: Работает! Я получаю эти пользовательские данные. - Я пытался использовать тестовый инструмент на странице распознавателя, но он дает только поддельные данные, поэтому я не могу на это полагаться.
Я сделал ошибку? На мой взгляд, все выглядит хорошо, но я что-то упускаю?
Могу ли я ясно видеть, что содержит $ctx.identity
?