在Express.js中使用会话

在Express.js中使用会话

我需要帮助了解Web应用程序的会话概念。 我正在运行带有Express 3.0的Node.js服务器。

我的目标是:

  • 为登录的每个用户创建一个会话

  • 存储此会话并使用它来验证用户是否已经登录(防止两个设备同时使用同一用户),并限制对某些页面的访问(通过将会话ID与某些其他数据相匹配)

我将使用MemoryStore来保存会话(看起来最简单)。 如果上述目标有意义,你能否提供一个如何实现它们的彻底解释?

采纳答案:

Express在github回购中有很好的例子 。 其中一个处理身份验证,并显示如何将用户附加到req.session对象。 这是在app.post('/login')路线内完成的。

为了限制对某些页面的访问,向这些路由添加一个简单的中间件

function restrict(req, res, next) {
  if (req.session.user) {
    next();
  } else {
    req.session.error = 'Access denied!';
    res.redirect('/login');
  }
}

app.get('/restricted', restrict, function(req, res){
  res.send('Wahoo! restricted area, click to <a href="/logout">logout</a>');
});

正如Brandon已经提到的那样,你不应该在生产中使用MemoryStore。 Redis是一个很好的选择。 使用connect-redis访问数据库。 一个示例配置看起来像这样

var RedisStore = require('connect-redis')(express);

// add this to your app.configure
app.use(express.session({
  secret: "kqsdjfmlksdhfhzirzeoibrzecrbzuzefcuercazeafxzeokwdfzeijfxcerig",
  store: new RedisStore({ host: 'localhost', port: 3000, client: redis })
}));

参考更多解答:在Express.js中使用会话,转载请保留在Express.js中使用会话

更多:express