Node Express 设置 cookie

Con*_*ght 5 node.js express reactjs

我这里可能有误解。

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

React 应用程序正在get向节点服务器发出请求 - 我的服务器代码如下所示:

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!'))
Run Code Online (Sandbox Code Playgroud)

我正在尝试设置house_user令牌,以便稍后可以跟踪用户的请求。

但是,未在用户上设置令牌(来自 的请求localhost:8080) -house_user令牌始终为空(事实上,req.cookies完全为空)。我还需要做其他事情吗?

aqu*_*seb 4

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

[编辑] withCredentials:true 应该可以用 axios 解决这个问题。

axios.get('localhost:3000', {withCredentials: true}).then(function (res) { console.log(res) })
Run Code Online (Sandbox Code Playgroud)
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}`)
})
Run Code Online (Sandbox Code Playgroud)