获取API cookie无法访问?

时间:2018-06-05 00:36:25

标签: node.js reactjs cookies passport.js fetch

我有一个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))

1 个答案:

答案 0 :(得分:1)

我认为credentials对象中的header不是标题。

此外,cookies不是document的属性,而是document.cookie