一尘不染

在Express.js中使用会话

node.js

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

我的目标是:

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

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

我将使用MemoryStore保存会话(似乎最简单)。如果上述目标有意义,您能否提供有关如何实现这些目标的详尽解释?


阅读 221

收藏
2020-07-07

共1个答案

一尘不染

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>');
});

正如布兰登已经提到的那样,您不应在生产中使用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 })
}));
2020-07-07