Включить CORS при локальном запуске AWS SAM CLI - PullRequest
0 голосов
/ 15 ноября 2018

Всякий раз, когда я пытаюсь получить доступ к безсерверной лямбда-функции через POST через браузер, я получаю сообщение об ошибке

Ответ на предварительный запрос не проходит проверку контроля доступа: Нет> Заголовок «Access-Control-Allow-Origin» присутствует в запрашиваемом ресурсе.

Когда это /GET, он работает нормально, я прочитал его, потому что он не отправляет запрос перед полетом. Когда я изменяю его на POST, это когда он терпит неудачу.

Команда, которую я выполняю:

sam local start-api

И мой template.yaml:

...

Resources:
    PropertiesFunction:
        Type: AWS::Serverless::Function
        Properties:
            CodeUri: target/service-0.0.1-SNAPSHOT.jar
            Handler: com.aws.PropertiesHandler::handleRequest
            Runtime: java8
            Events:
                PropertiesApi:
                    Type: Api
                    Properties:
                        Path: /properties
                        Method: post

...

Как включить CORS на этих конечных точках?

1 Ответ

0 голосов
/ 21 ноября 2018

Вы сможете обойти это для локального тестирования, явно добавив следующие заголовки к вашему ответу в функции обработчика:

    "Access-Control-Allow-Origin": "*"

Вы можете использовать переменную среды, которая добавляет заголовки, только если вы работаете локально.

Вот простой пример Python из имеющейся у меня функции обработчика:

   if not all(field in values for field in required_fields):
    response = {
        'statusCode': 400,
        'body': json.dumps(
            {
                'message': 'Required data missing from request body'
            }
        )        
    }
    # explicitly add CORs headers for local testing
    response['headers'] = {"Access-Control-Allow-Origin": "*"}
    return response

Это подходит только для локального тестирования, когда развертывание в API-интерфейсе шлюза API выполняется с помощью конфигурации на API-шлюзе.

Это решение работало для меня, пока я не добавил авторизацию в API с пулом пользователей Cognito, через который я сейчас пытаюсь работать.

Вот аналогичный пост по этому вопросу: Как включить CORS для ресурса шлюза API AWS

Вот ссылка на это в официальной документации AWS.

...