1

我尝试在 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) 从未被解雇...

4

1 回答 1

0

好的,

我应该做的

console.log(session.id);

但是,我认为当我执行 console.log(session); 时会出现整个对象内容。

于 2012-05-25T02:22:00.317 回答