我有一个React应用程序,它向运行passportjs进行身份验证的快速后端发出REST POST请求。我正在尝试使用Fetch API发送POST请求,但是当我这样做时,我不知道如何访问从服务器发回的cookie。我看到响应标题在devtools中显示了我想要的cookie,当我使用常规html时,它也能正常运行并且cookie会自动发送并保持不变。我的问题是我在使用Fetch API时无法保留cookie,因为我不知道如何在收到它后访问它。
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))
答案 0 :(得分:1)
我认为credentials
对象中的header
不是标题。
此外,cookies
不是document
的属性,而是document.cookie
。