Как я могу заставить мой экспресс-сервер перенаправить клиента в другой домен, используя cors? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть экспресс-сервер, на котором уже есть Cors Middlewear.

https://myapi.com

app.use(cors({ origin: true }));

У меня есть одностраничное приложение, которое отправляет запрос и предполагает перенаправление на PayPal после.(Он обслуживается из другого источника, как указано ниже)

https://myAngularApp.com (некоторые услуги)

http.post('https://myapi.com/create-payment', data);

Итак, вернемся на экспресс-сервер, я хочуотправить их в PayPal для аутентификации:

app.post('/create-payment', (req, res) => {
  res.redirect('https://www.sandbox.paypal.com/somewhere..');
})

Вернувшись в клиент, я получаю следующую ошибку:

Не удалось загрузить https://www.sandbox.paypal.com/somewhere: Ответ на запрос предполетной проверкине проходит проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Поэтому исходный код 'null' не разрешен для доступа.

Глядя на запрос, который мой клиент отправляет в PayPal, вы также можете видеть, что источник является нулевым.

enter image description here


(Отметим, что отключение app.use(cors({ origin: true })); не позволит клиенту получить нормальный ответ от сервера, так что это уже показывает, что связующее ПО cors связано.

Ошибка при комментировании cors

// app.use(cors({ origin: true })); - Commented Out

Не удалось загрузить "https://myapi.com/create-payment": Перенаправление с 'https://myapi.com/create-payment' на' https://www.sandbox.paypal.com/somewhere.' имеетбыл заблокирован политикой CORS: на запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Следовательно, Origin 'https://myAngularApp.com' не имеет доступа.


Что еще мне нужно настроить на экспресс-сервере, чтобы клиент мог быть перенаправлен на PayPal?

1 Ответ

0 голосов
/ 17 мая 2018

Перенаправления работают следующим образом:

  1. Клиент отправляет HTTP-запрос
  2. Сервер отправляет HTTP-ответ, содержащий инструкцию для запроса другого URL-адреса
  3. Клиент отправляет HTTP-запросна другой URL
  4. Сервер (возможно, другой сервер) отправляет ответ HTTP

Если на шаге 2 сервер предоставляет разрешение на чтение ответа через CORS, то это дает разрешениедля этого запроса.

Нет способа для ответа на шаге 2 (который создается вашим сервером) предоставить разрешение на чтение ответа на шаге4 (который создается сервером PayPal).

Если Paypal не предоставляет разрешения с помощью CORS, тогда ваш JavaScript не может прочитать ответ.

(Представьте себе,если это не так: EvilHacker.Net дает разрешение с CORS, затем перенаправляет на GMail.com, и тогда EvilHacker может прочитать всю вашу электронную почту!)

...