我目前正在尝试为我的node.js应用程序设置一个基本身份验证系统.目前我使用express(3.0.0rc5),passport(0.1.12)和socket.io(0.9.10)与Mongoose作为会话数据存储.我也一直在玩,everyauth但我不喜欢与承诺合作.
现在的情况:
通过护照进行身份验证(Facebook策略)是成功的,session.sid在重定向后在客户端上设置了cookie,我能够在我的数据库中看到会话文档.我可以在访问会话cookie socket.io通过socket.handshake.headers.cookie.
如果我正确理解了护照概念,则在authentication passport.serializeUser调用成功后,我可以向会话添加信息.在我的情况下,最重要的信息是电子邮件,所以我按以下方式设置序列化程序:
passport.serializeUser(function(user, done) {
done(null, user.email);
});
Run Code Online (Sandbox Code Playgroud)
现在,我必须在socket.io事件中仅使用cookie信息从会话中提取电子邮件地址.
var connect = require('connect'),
parseSignedCookie = connect.utils.parseSignedCookie,
cookie = require('express/node_modules/cookie');
io.on('connection', function(socket) {
if(socket.handshake.headers.cookie) {
var cookie = cookie.parse(socket.handshake.headers.cookie);
var sessionID = parseSignedCookie(cookie['connect.sid'], 'secret');
}
});
passport.deserializeUser(function(id, done) {
// so, what is supposed to be done here?
});
Run Code Online (Sandbox Code Playgroud)
因此,如果我没有弄错,现在可以使用任务deserializeUser来访问相应的电子邮件地址.
我该怎么办?任何指针都非常感谢.