Получить файлы cookie API не доступны? - PullRequest
0 голосов
/ 05 июня 2018

У меня есть приложение React, которое отправляет запрос REST POST экспресс-бэкэнду, который выполняет passportjs для аутентификации.Я пытаюсь использовать Fetch API для отправки POST-запроса, но когда я это делаю, я не знаю, как получить доступ к cookie-файлам, отправляемым с сервера.Я вижу, что заголовки ответа показывают файл cookie, который мне нужен, в devtools, а также, когда я использую обычный html, он работает, и файл cookie отправляется автоматически и сохраняется.Моя проблема в том, что я не могу сохранить cookie при использовании Fetch API, так как я не знаю, как получить к нему доступ после его получения.

  login () {
    const data = {
      username: this.state.username,
      password: this.state.password
    }

    const options = {
      method: 'POST',
      body: JSON.stringify(data),
      headers: {
        'Content-Type': 'application/json',
        credentials: 'include' // tried this too.
        // credentials: 'same-origin'
      }
    }

    fetch('/login', options)
      .then(res => {
        console.log('res', res)
        // cookies.set('connect.sid', document.cookie['connect.sid'])
        console.log(document.cookie['connect.sid'])// undefined
        console.log(res.headers) // empty
        console.log(document.cookies) // undefined
        // cookies.set('connect.sid', res.headers) // need to set this but where is the cookie from server?
      })
      .then(this.clearInputFields.bind(this))
  }

и вот заголовки ответа, которые я получаю в настоящее время с помощью FETCH API:

HTTP/1.1 200 OK
x-powered-by: Express
content-type: text/html; charset=utf-8
content-length: 14
etag: W/"e-Xft1SGvF5rPEfqfROtKDA2epBao"
set-cookie: connect.sid=s%3ACRnk3A0b0o5T8VSQTVpvTUgW54lO38IJ.skdIbmipmb1CGn6oEQ5KzdS2zGdNiZQrFDwU5cTuy7A; Path=/
date: Tue, 05 Jun 2018 00:32:15 GMT
connection: close
Vary: Accept-Encoding

connect.sid - это то, что я хочу установить.Я видел другие статьи на эту тему, но, похоже, они не касаются моей конкретной проблемы.Любое руководство?

РЕДАКТИРОВАТЬ:

const options = {
  method: 'POST',
  body: JSON.stringify(data),
  credentials: 'include', // credentials moved to here fixed the issue
  headers: {
    'Content-Type': 'application/json'
  }
}

fetch('/login', options)
  .then(this.clearInputFields.bind(this))

1 Ответ

0 голосов
/ 05 июня 2018

Я думаю, что у вас есть credentials в header объекте, когда он не является заголовком.

Кроме того, cookies не является свойством document, скорее это document.cookie.

...