首页 > 解决方案 > 会话令牌未存储且无法从浏览器查看

问题描述

我正在尝试为我正在开发的应用程序设置用户 ID 的会话存储,但我无法终生使用快速会话。

我查看了大量堆栈溢出帖子、教程和其他网站,并按照那里的所有说明进行操作,但无济于事。cookie 甚至不会出现在浏览器中。我也尝试过更改 .use 的顺序,但没有其他位置有效。

这是代码

const session = require('express-session');
const cookieParser = require('cookie-parser');
const App = require('./app');

var app = new App();
const server = express();
const port = process.env.PORT || 3030;

server.use(cors());
server.use(express.static(path.join(__dirname, buildPath)));

server.use(cookieParser());

server.use(session({
  key: 'user_sid',
  secret: 'somerandonstuffs',
  resave: false,
  saveUninitialized: false,
  cookie: {
    maxAge: 10000,
    secure: false,
    ttpOnly: false
  }
}));

server.use((req, res, next) => {
  console.log(req.cookies);
  console.log(req.session);
  if (req.cookies.user_sid && !req.session.user) {
    res.clearCookie('user_sid');
  }
  next();
});

server.get('/api/userRole', async (req, res, next) => {
  try {
    const role = await app.userRole(req.query.userID, req.query.email);
    res.send({ role });
    req.session.user = req.query.userID; //assign
  }
  catch (error) {
    next(error);
  }
});

server.get('/api/music', async (req, res, next) => {
  try {
    console.log(req.session.user) //returns undefined
    const uid = req.query.user;
    app.checkAuth(uid, app.constants.roles.member);
    const music = await app.music(req.query.status);
    res.send(music);
  }
  catch (error) {
    next(error);
  }
});

这是控制台日志的结果

{}
Session {
  cookie: 
   { path: '/',
     _expires: 2019-07-19T22:01:58.342Z,
     originalMaxAge: 10000,
     httpOnly: false,
     secure: false } }
{}
Session {
  cookie: 
   { path: '/',
     _expires: 2019-07-19T22:01:58.387Z,
     originalMaxAge: 10000,
     httpOnly: false,
     secure: false } }
undefined

作为回应,我似乎得到的一切都是未定义的。知道可能出了什么问题吗?提前感谢您的帮助。

标签: node.jsexpress-session

解决方案


您需要为express-session.最简单的设置是session-file-store设置存储选项,但我建议在生产环境中使用connect-redis 之类的东西。

然后,您将会话存储实例传递给如下express-session选项:

var session = require('express-session');
var FileStore = require('session-file-store')(session);

var fileStoreOptions = {};

app.use(session({
   store: new FileStore(fileStoreOptions),
   secret: 'keyboard cat'
}));

推荐阅读