会话令牌未存储,无法在浏览器中查看

时间:2019-07-19 22:04:24

标签: node.js express-session

我正在尝试为正在运行的应用设置用户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

我似乎能得到的所有答复都是不确定的。任何想法可能出了什么问题吗?预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您需要为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'
}));