ExpressJS客户端会话不保存会话

时间:2017-06-30 04:58:22

标签: javascript node.js session express

我想在我的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"

所以问题是,如何使用这样的代理获取客户端会话?

1 个答案:

答案 0 :(得分:1)

由于您的React应用程序运行的源不同于您的后端,因此您需要明确告诉fetch为每个请求传递凭据(如Cookie):

fetch('http://your-backend', {
  credentials: 'include'  
}).then(...)