我想在我的Express后端使用client-sessions模块。所以我已经安装了模块并将其设置为使用Express,如下所示:
var sessions = require('client-sessions');
app.use(sessions({
cookieName: Constants.CLIENT_SESSION_NAME, // pi_client_session
secret: Constants.CLIENT_SESSION_SECRET, // some long string here
duration: Constants.CLIENT_SESSION_LIFETIME // 24 * 60 * 60 * 1000;
}));
但是,出于某种原因,每次请求都是空的。这是一个例子:
router.get('/auth', function(req, res, next) {
console.log("CLIENT SESSION BEFORE: " + JSON.stringify(req[Constants.CLIENT_SESSION_NAME]));
req[Constants.CLIENT_SESSION_NAME].test = "saved";
console.log("CLIENT SESSION AFTER: " + JSON.stringify(req[Constants.CLIENT_SESSION_NAME]));
return res.json({ sessionSaved: true});
}
这是我每次都得到的输出:
CLIENT SESSION BEFORE: {}
CLIENT SESSION AFTER: {"test":"saved"}
我试过Google Chrome,Opera。同样的结果。
我的设置是这样的:ReactJS应用程序代理从localhost:3000到localhost:3001这是我的快速后端。 我已尝试直接向Postman表达请求,并正常保存会话。所以问题肯定在于Proxying从反应到表达和回复。 反应方面的package.json文件如下(我没有包含依赖项):
"scripts": {
"build-css": "node-sass-chokidar src/ -o src/",
"watch-css": "npm run build-css && node-sass-chokidar src/ -o src/ --watch --recursive",
"start-js": "react-scripts start",
"start": "npm-run-all -p watch-css start-js",
"build": "npm run build-css && react-scripts build",
"eject": "react-scripts eject"
},
"proxy": "http://localhost:3001"
所以问题是,如何使用这样的代理获取客户端会话?
答案 0 :(得分:1)
由于您的React应用程序运行的源不同于您的后端,因此您需要明确告诉fetch
为每个请求传递凭据(如Cookie):
fetch('http://your-backend', {
credentials: 'include'
}).then(...)