withCredentials и подстановочный знак * - проблема с заголовком «Access-Control-Allow-Origin» - PullRequest
0 голосов
/ 21 января 2020

У меня есть приложение на nodejs, которое будет служить прокси для подключения к различным социальным платформам. Процесс выглядит следующим образом:

  1. Нажмите на кнопку, откройте новое окно
  2. Прежде чем закрыть окно, добавьте токен доступа в Cook ie (пока приложение включено localhost, поэтому токен находится в этом домене) в качестве одноразового номера и добавьте его в базу данных.
  3. Как только модальное окно закроется, go к другой конечной точке, которая будет принимать этот одноразовый номер из cook ie, выполнить поиск в базе данных и верните токен.

Вот проблема, после отправки запроса AJAX для шага 3 возникает проблема CORS. Это код:

jQuery.ajax({
       url: "http://localhost:9057/facebook/gettoken",
       type: 'GET',
       dataType: "json",
       xhrFields: {
// -->> In order to access the cookie, we have to have this set as true.
           withCredentials: true
       },
       crossDomain: true,
       success: function (res) {
           console.log(res);
       }
});

В моем приложении NodeJS я установил cors:

if (config.getOption('PORT')) {
    const corsOptions = {
        credentials: true
    };

    app.use(cors(corsOptions));
// -->> I cannot have * here here, withCredentials cannot be set to true and have *, see the error below
    app.options('*', cors(corsOptions));
}

Это ошибка:

Доступ к XMLHttpRequest по адресу 'http://localhost: 9057 / facebook / gettoken ' из источника 'http://something.test: 8080 ' был заблокирован политикой CORS: значение параметра "Доступ" Заголовок -Control-Allow-Origin 'в ответе не должен быть подстановочным знаком' * ', если режим учетных данных запроса -' include '. Режим учетных данных запросов, инициированных XMLHttpRequest, контролируется атрибутом withCredentials.

Я не могу внести в белый список домены, которые 'http://something.test:8080' представляет, поскольку они будут пользовательскими веб-сайтами.

Кто-нибудь знает Обходной путь, если он есть?

1 Ответ

1 голос
/ 21 января 2020

См. документы .

. Они дают пример использования динамического c источника:

var whitelist = ['http://example1.com', 'http://example2.com']
var corsOptions = {
  origin: function (origin, callback) {
    if (whitelist.indexOf(origin) !== -1) {
      callback(null, true)
    } else {
      callback(new Error('Not allowed by CORS'))
    }
  }
}

Если Вы не можете сделать белый список, тогда просто удалите тест для белого списка!

var corsOptions = {
  origin: function (origin, callback) {
      callback(null, true)
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...