为什么邮递员在我的React应用程序中接收快速会话cookie但不接收我的发帖请求

时间:2019-04-09 05:37:30

标签: node.js reactjs passport.js postman express-session

我有一个带有express,express-session和护照进行身份验证的nodejs服务器。我的登录路线如下:

router.post('/login', passport.authenticate('local'), (req, res) => {
  return res.status(200).json({
    message: "Auth successful",
    username: req.user.username
  })
})

当我用邮递员测试路由时,在响应中收到带有会话ID的cookie:Postman result,但是当我在React中使用axios进行发布请求时,我不会接收任何cookie:

const login = (email, password) => {
    const reqBody = {
        email,
        password
    }

    const config = {
        withCredentials : true,
    }

    return axios.post(`${serverUrl}/user/login`, reqBody, config)
}

这是我的Node.js服务器中的核心设备:

// Cors definition 
app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000')
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept')
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE')
  res.setHeader('Access-Control-Allow-Credentials', true)

  next()
})

Network tab on Chrome如您所见,控制台中没有cookie选项卡,并且在标题中也没有注明。所以我想知道为什么以及如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

cookie不在响应中,而是在标头中。请在标题中查看您应该输入的内容是“ Set-Cookie”

答案 1 :(得分:0)

所以!我有点找到了为什么我可以在Postman响应中看到cookie而不是在浏览器(Chrome)中找到答案的原因。我在chrome中找到了cookie,而不是在页面控制台的 application-> Storage-> Cookies 中找到了cookie,而是在 chrome:// settings / cookies / detail?site = 192.168.2.89 < / em>。

我了解的是express-session或postman.session()仅在cookie上设置http:

  

在生成cookie时使用HttpOnly标志有助于减轻客户端脚本访问受保护cookie的风险(如果浏览器支持的话)。 https://www.owasp.org/index.php/HttpOnly

我仍然看不到express在哪里设置标题以及如何记录服务器发送的cookie。