我有一个带有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选项卡,并且在标题中也没有注明。所以我想知道为什么以及如何解决这个问题。
答案 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。