node.js - NodeJS Passport session 序列化 - 将用户反序列化到 session 中?

标签 node.js session serialization passport.js

我正在 NodeJS 中实现一个 Web 应用程序,其中用户需要在访问每个页面之前登录。

我使用 Passport 模块实现了用户身份验证。根据 Passport 指南页面,我在 Passport 配置中创建了 serializeUserdeserializeUser 用户函数,以便使用 session 跟踪。

在 deserializeUser 函数中,我从 cookie 中获取存储的信息,传递给函数的第一个参数,并在数据库中的用户表中搜索以检索用户详细信息并将其传递给 done 功能。

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

我的问题是,这种不断查询数据库(在性能和逻辑方面)来获取用户对象是否是正确的做法,或者我理解和实现了错误的东西。可能做了一些并不真正需要的事情?

最佳答案

这是正确的行为,是的:deserializeUser() 将在每个请求时触发,如果这需要从数据库加载数据,那么就会发生这种情况。通常,这根本不会成为问题,因为加载速度非常快,但如果出现问题,您的应用程序中可能会出现更广泛的数据库/网络问题。

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

关于node.js - NodeJS Passport session 序列化 - 将用户反序列化到 session 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421366/

相关文章:

java - 将java encog网络序列化到数据库

java - 需要在不使用 java.util.Map 的情况下创建可序列化的键值映射,使用我的解决方法继续遇到 NullPointerException

javascript - Node.js 中的正则表达式未显示所有匹配项

node.js - 引用Mongoose多个文档

php - 为什么 ( $_SESSION = [];) 使服务器无法处理请求?

mysql - 如何在同一个Hibernate事务中保存两个数据库记录?

node.js - API.ai/Dialogflow 基本文本请求不起作用

node.js - 我的 centos venet0 设置是否导致 url 在服务器上不起作用?

php - 每个用户有多少 session 变量被认为太多了? - PHP

java - 通过 ObjectInputStream 保存和加载类的 Arraylist