2014-10-17 33 views
1

我正在NodeJS中实现一个Web应用程序,用户在访问每个页面之前需要登录。NodeJS Passport会话序列化 - 反序列化用户进入会话?

我使用Passport模块实现了用户认证。根据护照指南页面,我创建了serializeUser反序列化用户用户功能在护照配置中,以便使用会话跟踪。

在deserializeUser功能,我从饼干,在传递给函数的第一个参数的存储信息,并在用户表中搜索数据库中检索用户的详细信息,并把它传递给做的功能。

但是我发现在每个请求中都会调用反序列化函数,并查询数据库以检索用户详细信息并将其传递给完成函数。

我的问题是,无论是常量查询数据库(在性能和逻辑上),获取用户对象,是正确的做法,还是我已经理解并实现了错误的东西。可能做的事情不是真的需要吗?

+0

是的,这确实是正确的惯例。如果您不想查询数据库,则可以将用户存储在内存中。但我不会太担心。 – laggingreflex 2014-10-17 09:03:24

+0

可能重复的[如何正确使用Passport.js?](http://stackoverflow.com/questions/24456015/how-to-properly-use-passport-js) – laggingreflex 2014-10-17 09:03:41

+0

@laggingreflex谢谢你的回答。我也曾想过为用户节省内存。但是我怀疑这是否是正确的做法。再次感谢 – mitsos1os 2014-10-17 09:10:05

回答

2

这是正确的行为是:deserializeUser()将触发每个请求,如果这需要从您的数据库加载数据,那么会发生什么。通常情况下,这不会成为问题,因为负载会非常快,但是如果它有问题,无论如何,您的应用可能会遇到更广泛的数据库/网络问题。

(如果需要,没有什么可以阻止你缓存数据)。

相关问题