【发布时间】:2014-08-18 19:28:04
【问题描述】:
我正在使用:
- Node.js
- Express 4.0
- Passport.js
- 用于身份验证的 Google OAuth 2
对于每个用户,我将他的 Google 个人资料(电子邮件等)中的一些信息、访问和刷新令牌以及其他信息存储在 MySQL 数据库中(我无法选择这项技术)用户在我的应用上注册时提供。
我看到了 passport.js 的不同用途,特别是关于该信息如何存储在会话中。
-
passport.js's configure page,我真的不知道 理解以下代码块的要点:
passport.deserializeUser(function(id, done) { User.findById(id, function(err, user) { done(err, user); }); });基本上,每次用户发出请求或访问页面时,都会向数据库发出请求并检索信息。有什么意义?它会大大降低应用程序的速度。调用
serializeUser时(即信息存储在会话中时)不应该从数据库中检索信息吗? 我了解到在
session中存储 太多 信息会减慢 应用程序。什么是“太多”?它会使应用程序变慢多少?做 有人知道某处是否有测试吗?我的应用页面需要 关于我的用户的不同数据集(例如,主页将 只需要他的名字,而个人资料页面将需要一切, 另一个页面需要知道他拥有什么汽车等...)。我是不是该 当passport.authenticate检查时,将所有这些信息存储在session如果用户存在于数据库中(从而限制对数据库的读取请求 到大约一个),或者只在会话中存储他的 id 并拥有我的 页面在必要时向数据库发出额外请求?-
我遇到的另一个问题:在注册过程中,我首先让用户登录他的 Google 帐户,我将他的个人资料的详细信息存储在某处,让他 填写额外信息的表格,然后我将所有内容插入 数据库。问题是我不知道如何正确存储他的谷歌 帐户详细信息,直到它们被插入数据库。暂时, 我将它们存储在
session,然后在插入时将其删除 是成功的。更具体地说,当在 我的数据库,我这样做,在我的passport.authenticate回调中:return done(null,false,userInfo);因此,用户未通过身份验证,我有 2 个问题:我必须 将
userInfo存储在某处,直到用户注册并且我有 注册完成后使用req.login()“手动”记录他。我是否应该允许他在他登录后立即进行身份验证? 谷歌帐户?如果他不会对我造成安全问题 没有完成注册?
- 最后,我阅读了有关使用 Reddis 的信息。这对我有帮助吗 这些问题?
非常感谢!
【问题讨论】:
标签: javascript node.js session passport.js