Доступ к XMLHttpRequest в заблокирован политикой CORS: Нет - PullRequest
1 голос
/ 05 мая 2019

Я сталкиваюсь с этой проблемой снова и снова, и все же я установил CORS: true. Я использую без сервера и AWS лямбда. Вот фрагмент без сервера -

functions:

  authenticate:
    handler: auth.authenticate
    events:
      - http:
          path: /api/authenticate
          method: post
          cors: true

А вот и лямбда.

module.exports.authenticate = (evt, ctx, done) => {

    let payload = JSON.parse(evt.body);

    connectToDatabase()
        .then(response => {
            let salt = response.users.setSalt();
            const account = {
                id: payload.id,
                username: payload.username,
                mobile: payload.mobile,
                salt: salt,
                password: response.users.setPassword(payload.password, salt),
                roles: payload.roles,
            }
            response.users.create(account)
                .then(user => {
                    done(null, {
                        statusCode: 200, 
                        headers: {
                            'Content-Type': 'application/json', 
                            'Access-Control-Allow-Origin': '*' 
                        },
                        body: response.users.generateJWT()
                    });
                })
                .catch(err => {
                    done (null, {
                        statusCode: 400,
                        headers: {
                            'Content-Type': 'application/json', 
                            'Access-Control-Allow-Origin': '*' 
                        },
                        body: JSON.stringify(Boom.badRequest(JSON.stringify(err))),
                    });
                });
        })
        .catch(err => {
            done (null, {
                statusCode: 400,
                headers: {
                    'Content-Type': 'application/json', 
                    'Access-Control-Allow-Origin': '*' 
                },
                body: JSON.stringify(Boom.badRequest('Database connection failed')),
            });
        });
}

ошибка, которую я получаю -

Access to XMLHttpRequest at 'amazonapigateway/dev/api/authorize' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я новичок в aws-lambda и без сервера. Могли бы помочь, пожалуйста.

Большое спасибо.

1 Ответ

0 голосов
/ 07 мая 2019

Я думаю, что это сочетание двух вещей:

  1. Если вы получаете 502 от API-шлюза, это означает, что ответ lambda не соответствует требованиям API-шлюза.
  2. API-шлюзникогда не добавляет заголовки CORS в ваш ответ - это ваша логическая (лямбда) ответственность.API Gateway может создавать маршрут OPTIONS, но не более.

Следовательно, где-то в вашем коде у вас фактически есть неверный ответ.Могу поспорить, что это строка, которая говорит response.users.generateJWT().Возможно, он возвращает только строку JWT, но с вашим заголовком Content-Type вы явно сказали, что возвращаете строку JSON.API-шлюз мог не проверить ваше тело и решил вернуть 502, очевидно, пренебрегая любыми заголовками, которые вы добавили к объекту ответа.

...