Drupal и CORS запрос от Axios: невозможно проверить статус входа - PullRequest
0 голосов
/ 28 октября 2018

Я создаю отдельное html / javascript-приложение, которое должно взаимодействовать с REST API Drupal 8.6.2.Мое приложение использует Vue.js, поэтому запросы ajax отправляются Axios.

Я хочу иметь возможность управлять приложением как в одном домене, так и через CORS из другого домена.Допустим, мой Drupal находится на https://drupal8.example.org

Я могу войти и выйти из https://drupal8.example.org/app и из http://localhost/app без проблем со следующим кодом:

//Login
axios.post(
  "https://drupal8.example.org/user/login?_format=json",
  JSON.stringify({
    'name': "myusername",
    'pass': "mypassword"
}), {
  headers: {
    'Content-Type': 'application/hal+json'
  },
  withCredentials: true
}).
then(function (response) {
  //my code goes here
});

// logout
axios.post(
  "https://drupal8.example.org/user/logout?_format=json&token=" + logout_token, {}, {
    headers: {
      'Content-Type': 'application/hal+json'
    },
    withCredentials: true
  }
).
then(function () {
  //my code goes here
})

Но я полностью не могу проверить с помощью CORS, вошел ли пользователь в систему:

//check login status
axios.get(
  "https://drupal8.example.org/user/login_status?_format=json", {}, {
    headers: {
      'crossDomain': true,
      'Content-Type': 'application/hal+json'
    },
    withCredentials: true
  }
).then(function (response) {
  console.log(response.data); // 1 from the same domain, 0 from localhost; should be 1 in both cases
});

Если я проверю URL https://drupal8.example.org/user/login_status?_format=json в окне браузера, он отобразит 1 , но запрос, сделанный CORS, возвращает 0 .

В чем причина проблемы и как ее решить?

1 Ответ

0 голосов
/ 28 октября 2018

Ну, решение довольно простое, но причина мне пока неизвестна.Мне пришлось установить параметр по умолчанию для Axios :

axios.defaults.withCredentials = true;

Видимо, существует большая разница между default.withCredentials и withCredentials, отправляемыми с отдельными запросами.Я не знаю, если это ошибка или особенность ...

Этот ответ помог мне найти решение.

...