Как использовать AMAZON_COGNITO_USER_POOLS в aws API усиления в ReactJS - PullRequest
0 голосов
/ 13 января 2020

У меня есть приложение в React, которое использует AWS Amplify 'API и Auth. Я настроил API_KEY и AMAZON_COGNITO_USER_POOLS для доступа к API. Например, у меня есть схема graphql:

type Course @model @auth(rules: [
    # Defaults to use the "owner" field.
    {allow: owner, ownerField: "author", provider: userPools, operations: 
    [read, create, update, delete]},
    # Admin users can access any operation.
    { allow: groups, groups: ["Admin"] },
    # Next allow public access with an API Key
    {allow: public, provider: apiKey, operations: [read]}
    ]){
    id: ID!
    title: String!
    content: String!
    author: String
}

Я отправил свои изменения (amplify push), но я получил Not Authorized to access createCourse on type Course с пользователем, который успешно вошел в систему через AWS Cognito, когда я попробуйте создать курс:

API.graphql({
   query: createCourse,
   variables: {input: {...course}},
   authMode: 'AMAZON_COGNITO_USER_POOLS'
})

Дополнительная информация: Я использую федеративный вход (Google). На сайт заходит пользователь, он авторизуется через гугл. Токен доступа доступен через: Auth.currentSession()).getIdToken().getJwtToken(), но я не делаю, если мне нужно что-то делать с этим токеном или он автоматически используется в вызове API Graphql.

1 Ответ

0 голосов
/ 14 января 2020

В вашем определении типа у вас есть ownerField: "author", поэтому вы должны передать Current Authenticated User для ввода.

course= {
        title: "titel...", 
        content: "content...", 
        author:user //Current Authenticated User
         };


Получить текущий аутентифицированный объект пользователя

Auth.currentAuthenticatedUser({
       bypassCache: false 
      }).then(user => console.log(user))
        .catch(err => console.log(err));
...