У меня есть приложение 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))