【发布时间】:2017-12-03 23:09:54
【问题描述】:
我想在我的 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。同样的结果。
我的设置是这样的:从 localhost:3000 到 localhost:3001 的 ReactJS 应用代理,这是我的快速后端。 我已经尝试直接请求与 Postman 表达,并且它正常保存了会话。所以问题肯定出在从反应到表达和返回的代理中。 我在 react 端的 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"
所以问题是,我怎样才能使用这样的代理获取客户端会话?
【问题讨论】:
-
您确定客户端请求正确传递了凭据吗?您应该检查 a) 客户端是否收到会话 cookie 和 b) 客户端是否在后续请求中发送该 cookie。另外,请看这里:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…
-
我忘了说,我使用的是 fetch(),而不是 XMLHttpRequest。但是感谢您向我指出关键字凭据:)。我会尝试用 fetch 检查它
-
哇!非常感谢您为我指明正确的方向!我已将 {credentials: 'include' } 添加到我的 fetch() 参数中,现在一切正常:) 您可以在此处输入您的回复作为答案,我会接受它
标签: javascript node.js session express