我正在 NodeJS 中实现一个 Web 应用程序,其中用户需要在访问每个页面之前登录。
我使用 Passport 模块实现了用户身份验证。根据 Passport 指南页面,我在 Passport 配置中创建了 serializeUser 和 deserializeUser 用户函数,以便使用 session 跟踪。
在 deserializeUser 函数中,我从 cookie 中获取存储的信息,传递给函数的第一个参数,并在数据库中的用户表中搜索以检索用户详细信息并将其传递给 done 功能。
但是我发现在每个请求中都会调用反序列化函数并查询数据库以检索用户详细信息并将其传递给 done 函数。
我的问题是,这种不断查询数据库(在性能和逻辑方面)来获取用户对象是否是正确的做法,或者我理解和实现了错误的东西。可能做了一些并不真正需要的事情?
最佳答案
这是正确的行为,是的:deserializeUser()
将在每个请求时触发,如果这需要从数据库加载数据,那么就会发生这种情况。通常,这根本不会成为问题,因为加载速度非常快,但如果出现问题,您的应用程序中可能会出现更广泛的数据库/网络问题。
(如果需要,没有什么可以阻止您缓存数据)。
关于node.js - NodeJS Passport session 序列化 - 将用户反序列化到 session 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421366/