Использование куки с axios и Vue - PullRequest
0 голосов
/ 18 января 2019

Я создал экспресс-сервер Node.js, который подключается к Salesforce.com с использованием интерфейса SOAP, предоставляемого jsforce. Он использует сессионные куки для авторизации через пакет 'express-session'. Пока у него есть метод POST для входа в систему и GET для выполнения простого запроса. Тестирование с почтальоном показало, что этот сервер работает как положено.

Как интерфейс браузера к этому серверу, я написал приложение Vue, которое использует axios для выполнения GET и POST. Мне нужно сохранить файл cookie сеанса, созданный во время входа в систему POST, а затем прикрепить файл cookie к последующим операциям CRUD.

Я пробовал разные способы обработки файлов cookie. Один метод, который я попробовал, использует перехватчики ответа axios на POST

axios.interceptors.response.use(response => {
  update.update_from_cookies();
  return response;
});

Функция update_from_cookies пытается получить cookie с именем js-force, но не находит его, хотя я знаю, что он отправляется

import Cookie from 'js-cookie';
import store from './store';

export function update_from_cookies() {
  let logged_in = Cookie.get('js-force');
  console.log('cookie ' + logged_in);
  if (logged_in && JSON.parse(logged_in)) {
    store.commit('logged_in', true);
  } else {
    store.commit('logged_in', false);
  }
}

Я также видел различные рекомендации по добавлению параметров в вызовы axios, но они также не работают.

Буду признателен за советы о том, как обращаться с файлами cookie с помощью axios или аналогичного пакета, который работает с Vue

.

Спасибо

1 Ответ

0 голосов
/ 18 января 2019

Проблема была решена. Я использовал неправильный синтаксис для вызова Axios

Правильный синтаксис имеет {withCredentials: true} в качестве последнего параметра

  this.axios.post(uri, this.sfdata, {withCredentials: true})
    .then( () =>   {
      this.$router.push( {name : 'home' });
    })
    .catch( () => {
    });
...