如何使用express-session作为身份验证处理程序

时间:2014-06-10 09:56:58

标签: javascript node.js session express

我正在使用express 4和express-session构建一个简单的登录应用程序。

如果我这样做:

app.use(session({
  store: new MongoStore({ db: 'sess' }),
  secret: 'Ninja Turtle',
  cookie: { path: '/', httpOnly: true, secure: false, maxAge: 3600000 } // 1 hour expiration
}));

所有http请求都将通过会话中间件流动,访问者将在他们访问的第一条路径上获得空会话和密钥cookie。如果此路由需要身份验证,则无关紧要。它可能是登录页面。

我对处理身份验证的第一个想法是检查所请求的会话是否存在,如果为true =访问者已登录。但是当访问者通过访问任何路由获得他的(空)会话时,这似乎不合理。

我是否应该以某种方式将会话中间件添加到某些路由中,以便访问者只需访问任何路由就不会获得空会话?

或者向经过身份验证的会话添加属性是否更好,例如:logged_in: true

现在我对Passwordjs等类似的中间件解决方案不感兴趣,因为我想从下到上了解这是如何工作的。

1 个答案:

答案 0 :(得分:1)

我刚刚在你的帖子中做了你描述的内容,一个带有存储会话的登录应用程序(在我的情况下是Redis)。

每个用户都有会话是正常的。 因此,我不会考虑仅将会话中间件启用到某些路由,因为在未来,即使是未登录的用户,您也可能希望使用用户的会话。

在我的情况下,我只是在会话中将属性设置为true

if ( YourLogInCondition ) {
  req.session.logged = true;
  //rest of login action
}

这可能不是最好的方法,但这就是我所做的。

希望它有所帮助。

干杯