#reactjs #amazon-web-services #graphql #aws-amplify #aws-appsync
#reactjs #amazon-веб-сервисы #graphql #aws-amplify #aws-appsync
Вопрос:
Я новичок в AWS Amplify и пытаюсь сделать простой проект.
У меня есть два разных проекта интерфейса (react). Один из них для читателей блогов, а другой для редакторов.Для обоих приложений я хочу использовать одни и те же таблицы DynamoDB (и использовать graphql api). Но я хочу использовать разные пулы пользователей для каждого проекта. Как я могу это реализовать?
Я читал эту статью — https://medium.com/@fullstackpho/aws-amplify-multi-auth-graphql-public-read-and-authenticated-create-update-delete-1bf5443b0ad1
Я знаю, что AWS AppSync поддерживает несколько типов авторизации, таких как cognito, ключ api… Но поддерживает ли он два типа cognito?
Спасибо,
Комментарии:
1. Вы имеете в виду cognito group или cognito user_pool по типу cognito?
Ответ №1:
Согласно документации AWS, вы можете использовать две разные группы Cognito для доступа к одному и тому же API AppSync, обращающемуся к одной и той же таблице DynamoDB, следующими способами, которые довольно просты;
Если вы используете aws_auth
директиву
type Query {
getPosts:[Post!]!
@aws_auth(cognito_groups: ["Bloggers", "Readers"])
}
Если вы используете aws_cognito_user_pools
директиву
type Query {
getPosts:[Post!]!
@aws_api_key @aws_cognito_user_pools(cognito_groups: ["Bloggers", "Readers"])
}
Теперь, если вам конкретно нужны два разных пула пользователей для вашего одного и того же API и таблицы DynamoDB, вам придется пройти немного больше миль, чтобы достичь этого. Ниже приведены шаги:
- Добавьте оба ваших пула пользователей в качестве дополнительных поставщиков авторизации в настройках AppSync.
- Используйте
@aws_cognito_user_pools
директиву с вашими запросами и мутацией в схеме и объекте, к которому эти запросы и мутации пытаются получить доступ. - Это сложная задача! Когда вы пытаетесь получить доступ к
$ctx.identity.cognitoIdentityPoolId
в своем распознавателе запросов / мутаций, он выдает вам null. Потому чтоcognitoIdentityPoolId
включен только вAWS_IAM
заголовок авторизации, а не вAWS_COGNITO_USER_POOLS
[Ссылка]. Однако вы все равно можете получить идентификатор пула пользователей изiss
поля в$ctx.identity.claims
, и это будет выглядеть примерно такhttps://cognito-idp.us-xxxx-x.amazonaws.com/us-xxxx-X_XxxXxxXX
. Этоus-xxxx-X_XxxXxxXX
ваш идентификатор пула пользователей, который вам нужно будет как-то проанализировать. - После анализа идентификатора пула пользователей вы можете фильтровать своих пользователей на основе идентификатора пула Cognito, а затем предоставлять им доступ к нужной вам таблице.
Комментарии:
1. Должны ли оба пула пользователей быть дополнительными поставщиками авторизации? Или один может быть поставщиком аутентификации по умолчанию и еще один дополнительным?