gpt4 book ai didi

node.js - Node Express 设置 cookie

转载 作者:太空宇宙 更新时间:2023-11-03 22:50:20 25 4
gpt4 key购买 nike

我可能有误解。

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

React 应用程序正在向 Node 服务器发出 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!'))

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

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

最佳答案

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

[编辑] 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}`)
})

关于node.js - Node Express 设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49343265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com