我尝试在 Everyauth 的 .findOrCreateUser 上获取Express sessionID 。
这个问题的背景:
基本上,我尝试整合 Socket.IO 和 Express,并阅读socket.io 和 Express。将这一切捆绑在一起,
我可以从 socket.IO 范围获取Express sessionID ,这对我的项目设计很重要。
io.sockets.on('connection', function (socket) {
console.log('A socket with sessionID ' + socket.handshake.sessionID
+ ' connected!');
});
到目前为止一切顺利......然后,我还需要在 Everyauth 的 .findOrCreateUser 上获取Express sessionID 。
虽然我是 Everyauth 的初学者,但在配置如下everyauth 进程后,我设法获得了 facebook/google/twitter 用户 ID 等,例如everyauth.facebook:
everyauth.facebook
.entryPath('/auth-facebook')
.appId(conf.fb.appId)
.appSecret(conf.fb.appSecret)
.findOrCreateUser(function (session, accessToken, accessTokenExtra, fbUserMetadata)
{
console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
console.log(session); // <-- if this session object includes sessionID, everything works for me..
console.log(fbUserMetadata);
return usersByFbId[fbUserMetadata.id] ||
(usersByFbId[fbUserMetadata.id] = addUser('facebook', fbUserMetadata));
})
.redirectPath('/public/authdone.html');
node.js console.log 如下:
2012-05-24T18:59:31+00:00 app[web.1]: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
2012-05-24T18:59:31+00:00 app[web.1]: { lastAccess: 1337885971024,
2012-05-24T18:59:31+00:00 app[web.1]: cookie:
2012-05-24T18:59:31+00:00 app[web.1]: { path: '/',
2012-05-24T18:59:31+00:00 app[web.1]: httpOnly: true,
2012-05-24T18:59:31+00:00 app[web.1]: _expires: Thu, 24 May 2012 22:59:30 GMT,
2012-05-24T18:59:31+00:00 app[web.1]: originalMaxAge: 14400000 },
2012-05-24T18:59:31+00:00 app[web.1]: auth:
2012-05-24T18:59:31+00:00 app[web.1]: { twitter:
2012-05-24T18:59:31+00:00 app[web.1]: { token: 'w0HH4lrzMfeqCLOwd4ncHoPndlyHHqMvyXZM5mGhx8',
2012-05-24T18:59:31+00:00 app[web.1]: tokenSecret: 'Pzfooy4UVRZpwXvPMJRDFXUX1LdMN59hZwz4ZkBIOc' },
2012-05-24T18:59:31+00:00 app[web.1]: facebook:
2012-05-24T18:59:31+00:00 app[web.1]: { user: [Object],
2012-05-24T18:59:31+00:00 app[web.1]: accessToken: 'AAACrg6U8ThcBAG4QVDvIM5Qjd2gsjc3jYnHBas7g0w5QcdUJ0cgXXYBBCnmNaz8exdiFLtgXvruoErZCCXX9yitSZB3SIoAB0cKSPguAZDZD' },
2012-05-24T18:59:31+00:00 app[web.1]: loggedIn: true,
2012-05-24T18:59:31+00:00 app[web.1]: userId: 1,
2012-05-24T18:59:31+00:00 app[web.1]: google:
2012-05-24T18:59:31+00:00 app[web.1]: { user: [Object],
2012-05-24T18:59:31+00:00 app[web.1]: accessToken: 'ya29.AHES6ZRq_AFBJNLG92rSuqApI7dmE0fSq12AifJ14nxNNwlJ6OsFo58' } } }
显然,twitter、facebook 和 google 身份验证信息是通过 express 会话适当收集的,但是,
.findOrCreateUser(function (session... 不包括Express sessionID
如何适当地在 Everyauth 的 .findOrCreateUser 上获取 Express sessionID?谢谢。
编辑
在这篇文章之后,我尝试实施
everyauth.facebook
.entryPath('/auth-facebook')
.appId(conf.fb.appId)
.appSecret(conf.fb.appSecret)
.findOrCreateUser(function (session, accessToken, accessTokenExtra, fbUserMetadata)
{
console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
console.log(session);
console.log(fbUserMetadata);
return usersByFbId[fbUserMetadata.id] ||
(usersByFbId[fbUserMetadata.id] = addUser('facebook', fbUserMetadata));
})
.findUserById(function (req, userId, callback)
{
console.log("######################################");
console.log(req.sessionID);
})
.redirectPath('/public/authdone.html');
但是, .findUserById(function (req, userId, callback) 从未被解雇...