Node Express-Session和React前端未使用Axios存储Cookie

时间:2020-03-11 18:27:13

标签: node.js reactjs cookies axios express-session

这里的资深Web开发人员。我似乎遇到了这个问题(直到最近才出现),其中每个API请求的Cookie会话ID都会更改。

编辑确认可以在IE11和Edge中工作!?不是乔姆? WTF!不适用于提取和凭证:也包括“ include”。.

我有一个具有安全登录名的网站,但是由于Cookie未存储在他们的浏览器中,现在有些人无法登录。奇怪的是,直到最近Chrome才发生这种情况!我不确定发生了什么或发生了什么变化。.

在网络标头中,服务器返回了一个Set-Cookie标头,因此后端似乎可以正常工作。

下面是一个代码示例,不适用于我的前端(React w / Axios)。我的前端在我的Mac主计算机上运行,​​而节点服务器在Windows笔记本电脑上运行。

我已经尝试过app.set信任代理(已注释掉),但这似乎没有任何改变。 另外,我一直在搜索该域名,并尝试了一些方法,但是似乎找不到任何有效的方法。我正在 localhost 上进行测试,并且后端具有与前端不同的URL。这是否是domain / CORS配置的问题?

节点服务器

const session = require('express-session')
const cors = require('cors')

const app = express()
app.use(express.json())
app.use(cors({ credentials: true, origin: ['http://localhost:3000', 'http://192.168.100.122'] }))

// app.set('trust proxy', 1)
app.use(session({
    secret: 'SECRET_KEY_HEEEE',
    resave: false,
    proxy: true,
    saveUninitialized: true,
    // Being tested via local IP Address, this would change to secure in prod
    cookie: { secure: false, httpOnly: false, maxAge: 600000 }
}))

app.get('/', (req, res) => {
    console.log(req.sessionID)
    // Session ID changes every time I hit this request
    if (req.session.views) {
        req.session.views++
        res.send(req.session.views.toString())
    } else {
        req.session.views = 1
        res.send('Started View Count!')
    }
})

app.listen(5050, _ => console.log('Getting smacked on port 5050'))

带有Axios和withCredentials = true的Reactive Frontend

import axios from 'axios'

axios.defaults.withCredentials = true

class App extends Component {

handleGetCookie = () => { 
        axios.get('http://192.168.100.131:5050/').then(response => {                     
    console.log(response.data) 
    // Response.data only shows "Started View Count"
    }) 
}

render() { 
    return (
         <div className="App">
             <h1>Express Sessions & MongoDB!</h1>
             <button onClick={this.handleGetCookie}>Get me a cookie!</button>
         </div>
    )
  }
}

export default App

我尝试将withCredentials更改为包含相同来源,但没有任何变化...

在我的浏览器设置中启用了cookie和3rd Party cookie!

任何帮助将不胜感激!

0 个答案:

没有答案