Безсерверная платформа с AWS cognito генерирует ошибку CORS - PullRequest
0 голосов
/ 21 февраля 2019

Я получаю это сообщение об ошибке от внешнего интерфейса Angular, и у меня нет прав прикасаться к моему лямбда-коду:

`Access to fetch at 'https://testapicd.***.***.com/localization/v1/role' from origin 'https://localization.test.***.***.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.`

Я искал везде, и, похоже, в моем коде нет ошибок.Мой безсерверный код

  getrole:
    handler: v1/handler_get_role.get_role
    name: get_role
    events:
      - http:
          path: v1/role
          method: get
          cors: true
          authorizer:
            name: CognitoCSAuthorizer
            type: COGNITO_USER_POOLS
            arn: ${file(config.${self:provider.stage}.json):userpoolarn}

Я трижды проверил все настройки, и все кажется правильным.Любой совет, что делать?Функциональность работает в среде разработки, но не при ее развертывании в тестовой среде.

Если я пытаюсь использовать токен непосредственно против API, он также не работает (но в dev он работает нормально).Я даже больше не верю, что это проблема CORS.Я думаю, что токен JWT неверен.

def get_role(event, context):
    return {
        'statusCode': 200,
        'headers': {
         'Content-Type': 'application/json',
         'Access-Control-Allow-Origin' : '*', # Required for CORS support to work
         'Access-Control-Allow-Credentials': 'true',
        },
        'body': json.dumps("TEST")
     }

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Я боролся с этой проблемой часами (если не днями) раньше, и оказалось, что не только мне пришлось включить cors в файле serverless.yml, но и добавить заголовки ответа в качестве атрибутов в объект, который вы возвращаете из Lambda..

Что-то вроде этого должно сделать это:

const response = {
    statusCode: 200,
    headers: {
      'Access-Control-Allow-Origin': '*',
      'Access-Control-Allow-Credentials': true,
    },
    body: JSON.stringify({
      product: product
    }),
  };

Эта статья тогда спасла мою жизнь, и я надеюсь, что она спасет вашу!

0 голосов
/ 21 февраля 2019

Эта строка в serverless.yml

arn: ${file(config.${self:provider.stage}.json):userpoolarn}

Должно было быть

arn: ${file(config.${opt:stage}.json):userpoolarn}

0 голосов
/ 21 февраля 2019

Ошибка CORS выдается при выполнении запросов к серверам в других доменах.В зависимости от сервера, который вы используете для размещения углового кода, существует множество способов решить эту проблему.

Вы можете попробовать это расширение Google Chrome, чтобы увидеть, сможете ли вы эффективно решить проблему, игнорируя ошибки CORS.

Один из наиболее распространенных способов решения этой проблемы - настроить прокси-сервер , но вы также можете решить его, занеся в белый список тестовый домен, манипулируя заголовком Access-Control-Allow-Origin в ваших запросах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...