Аксиос + Ионная реакция + Паруса: токен _csrf 403 Запрещено - PullRequest
1 голос
/ 29 сентября 2019

Я разрабатываю API с Sails.js и пользовательское приложение с Ionic-React. При загрузке страницы я делаю запрос axios, чтобы получить токен _csrf. Когда я отправляю данные из формы входа в систему парусов, я всегда получаю 403 Запрещенный ответ. Я отключил csrf (config / security.js) в парусах, а затем смог получить ответ. Я отправляю токен в заголовке.

Я тоже пытаюсь получить cookie сеанса, но он не работает, я думаю, что это может быть причиной того, что сервер отклонил запрос.

Ionic App:

componentDidMount(this: this) {
axios.get('http://localhost:1337/api/v1/security/grant-csrf-token')
  .then(response => {
    const _csrf = response.data._csrf
    this.setState({
      form: {
        ...this.state.form,
        _csrf: _csrf,
      }})
  });
}

OnSubmit:

const { emailAddress, password, _csrf } = this.state.form;
const config= {
  data: {
    "emailAddress": emailAddress,
    "password": password,
  },
  headers: {
    "x-csrf-token": _csrf
  },
  withCredentials: true,
  jar:cookieJar,
};

axios.post('http://localhost:1337/api/v1/users/authenticate', null, config)
.then(res => {
  console.log(res);
})
.catch(err => {
  console.log(err);
})};

В сети Chrome DevTools Ответ:

enter image description here

На почтальоне это то же самоезапрос работает, и я получаю 200 с пользовательскими данными, и запрос включает cookie sails.sid.

Я не хочу отключать защиту csrf, это не было бы решением. Это файл cookie sails.sid, который мне не хватает?

1 Ответ

0 голосов
/ 06 октября 2019

Я использую это,

axios({
                method: 'post',
                crossdomain: true,
                url: apiFormUrl,
                data: formData,
                headers: {
                    "Content-Type": "multipart/form-data",
                    "Authorization": access_token
                }
            })
                .then

, и это работает

...