【发布时间】:2013-12-10 18:20:06
【问题描述】:
我正在开发一个将部署到 Heroku 的 Web 应用程序。
我已经厌倦了“传统”的 Web 框架,因此选择了 Node.js 堆栈。我正在 Express.js 上设计应用程序。与例如相比,我发现它非常高效和直观。 Django 或 Grails。
因此,Web 应用程序将为访客和经过身份验证的用户提供功能。由于应用程序部署到 Heroku,这是一个云平台服务,由于 Heroku 的负载均衡器和一般做法,应用程序不能在服务器内存储任何内部状态。事实上,在分布式环境中,拥有内部状态也是糟糕的设计。
我的本地开发设置有一个 Redis 实例(用于存储会话)和一个 MongoDB 实例(用于存储用户数据,例如 Facebook 用户详细信息)。我正在使用 Passport.js 和 passport-facebook 来处理身份验证。目前,我只实现了 Facebook 身份验证,至少在本地可以正常工作。
问题是我不确定,也没有读过关于 Express / Passport 如何神奇地填充 req.user 对象的任何内容。我对此有点怀疑,感觉就像是存储在服务器的内存中。
passport.serializeUser(function(user, done) {
console.log(
"This outputs a complete" +
"User Profile object when the user logs in.",
user);
done(null, user);
});
passport.deserializeUser(function(obj, done) {
console.log(
"And this too, but I'm afraid that" +
"obj comes from memory.",
obj);
done(null, obj);
});
Passport.js documentation 并没有很好地说明这一点。我的猜测是 serializeUser() 从 Facebook 获取用户,但 deserializeUser() 从内存中获取?
如果是这样,是否可以将原始用户数据在 serializeUser() 中转储到 Mongo 数据库,然后在 deserializeUser() 中从那里获取?
【问题讨论】:
标签: mongodb heroku express redis passport.js