Node Express设置cookie

时间:2018-03-18 00:17:37

标签: node.js reactjs express

我可能在这里误会。

我有一个在localhost:8080运行的节点服务器,以及一个在get运行的React应用程序。

React应用程序正在向节点服务器发出const cookieParser = require('cookie-parser'); const crypto = require('crypto'); const express = require('express'); const app = express(); app.use(cookieParser()); app.get('/', function (req, res) { let user_token = req.cookies['house_user']; // always empty if (user_token) { // if the token exists, great! } else { crypto.randomBytes(24, function(err, buffer) { let token = buffer.toString('hex'); res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8080'); res.cookie('house_user', token, {maxAge: 9000000000, httpOnly: true, secure: false }); res.send(token); }); } }); app.listen(3000, () => console.log('Example app listening on port 3000!')) 请求 - 我的服务器代码如下所示:

house_user

我尝试设置localhost:8080令牌,以便稍后跟踪用户的请求。

但是,未在用户上设置令牌(来自house_user的请求) - req.cookies令牌始终为空(事实上, Bundle.main.url(forResource: "paper", withExtension: "pdf") 完全为空)。我还需要做点什么吗?

2 个答案:

答案 0 :(得分:1)

我刚试过下面的代码(并且它有效)。提醒一下,您可以将其粘贴到myNodeTest.js中,然后运行node myNodeTest.js并访问http://localhost:3003。如果确实有效,那么可能意味着您遇到了CORS问题。

[EDIT] withCredentials:true应该使用axios进行操作。

axios.get('localhost:3000', {withCredentials: true}).then(function (res) { console.log(res) })
const express = require('express')
const cookieParser = require('cookie-parser')
const crypto = require('crypto');

const port = 3003

app.use(cookieParser());

app.get('/', function (req, res) {
    let user_token = req.cookies['house_user']; // always empty

    if (user_token) {
        // if the token exists, great!
    } else {
        crypto.randomBytes(24, function(err, buffer) {
            let token = buffer.toString('hex');
            res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8080');
            res.cookie('house_user', token, {maxAge: 9000000000, httpOnly: true, secure: true });
            res.append('Set-Cookie', 'house_user=' + token + ';');
            res.send(token);
        });
    }
});

app.get('/', (request, response) => {
  response.send('Hello from Express!')
})

app.listen(port, (err) => {
  if (err) {
    return console.log('something bad happened', err)
  }

  console.log(`server is listening on ${port}`)
})

答案 1 :(得分:1)

将我的评论写成答案,因为它似乎解决了你的问题。

由于您运行的是http,而不是https,因此您需要从Cookie中删除secure: true,因为这样只能通过https发送Cookie连接将阻止浏览器通过http连接将其发回给您。

此外,删除res.append(...)只需res.cookie()即可。