Javascript passport socketio破坏了passport的实现?

Javascript passport socketio破坏了passport的实现?,javascript,node.js,socket.io,passport.js,passport.socketio,Javascript,Node.js,Socket.io,Passport.js,Passport.socketio,这是我的套接字配置: // set authorization for socket.io io.set('authorization', passportSocketIo.authorize({ cookieParser: express.cookieParser, key: 'connect.sid', // the name of the cookie where express/connect stores its se

这是我的套接字配置:

// set authorization for socket.io
    io.set('authorization', passportSocketIo.authorize({
        cookieParser: express.cookieParser,
        key:         'connect.sid',       // the name of the cookie where express/connect stores its session_id
        secret:      '1234',    // the session_secret to parse the cookie
        store:       sessionStore,        // we NEED to use a sessionstore. no memorystore please
        success: function (data, accept) {
            console.log('successful connection to socket.io');

            // The accept-callback still allows us to decide whether to
            // accept the connection or not.
            accept(null, true);
        },
        fail: function (data, message, error, accept) {
            if(error)
                throw new Error(message);
            console.log('failed connection to socket.io:', message);

            // We use this callback to log all of our failed connections.
            accept(null, false);
        }
    }));
这是登录的passport实现,它在没有passport.socketio的情况下非常有效:

exports.facebookStrategy = function () {

    return new FacebookStrategy({
        //client configuration
    },
    function(accessToken, refreshToken, profile, done) {
        User.findOrCreate({uid: profile.id},
            {
                username: profile.username,
                gender: profile.gender,
                first_name: profile.name.givenName,
                last_name: profile.name.familyName,
                photo: 'https://graph.facebook.com/' + profile.username + '/picture?type=large',
                access_token: accessToken
            },
            function(err, user) {
                if (err) { return done(err); }
                done(null, user); // This is were it breaks
        });
        console.log(profile);
    });

}
这是我收到的错误,我不知道如何解决它:

TypeError: object is not a function
    at pass (node_modules/passport/lib/passport/index.js:287:14)
    at Passport.serializeUser (/node_modules/passport/lib/passport/index.js:289:5)
    at IncomingMessage.req.login.req.logIn (node_modules/passport.socketio/node_modules/passport/lib/http/request.js:48:29)
    at Context.delegate.success (node_modules/passport/lib/passport/middleware/authenticate.js:194:13)
    at Context.actions.success (node_modules/passport/lib/passport/context/http/actions.js:21:25)
    at verified (/sociable/node_modules/passport-facebook/node_modules/passport-oauth2/lib/strategy.js:181:18)
    at /app/lib/auth.js:25:5
    at Promise.<anonymous> (/node_modules/mongoose-findorcreate/index.js:31:11)
    at Promise.<anonymous> (node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
    at Promise.EventEmitter.emit (events.js:95:17)
TypeError:对象不是函数
通过时(node_modules/passport/lib/passport/index.js:287:14)
在Passport.user(/node_modules/Passport/lib/Passport/index.js:289:5)
在IncomingMessage.req.login.req.login(node_modules/passport.socketio/node_modules/passport/lib/http/request.js:48:29)
在Context.delegate.success(节点_modules/passport/lib/passport/middleware/authenticate.js:194:13)
在Context.actions.success(node_modules/passport/lib/passport/Context/http/actions.js:21:25)
已验证(/sociable/node_modules/passport-facebook/node_modules/passport-oauth2/lib/strategy.js:181:18)
at/app/lib/auth.js:25:5
答应。(/node_modules/mongoose findorcreate/index.js:31:11)
答应。(node_modules/mongoose/node_modules/mpromise/lib/promise.js:177:8)
在Promise.EventEmitter.emit(events.js:95:17)

为什么它要在用户对象上运行某种函数?我不明白!如果我将done方法留空,它将不会崩溃,但也没有设置会话,而且我没有登录。

将passport var传递给passport socketio对象将解决此问题

 io.set('authorization', passportSocketIo.authorize({
                passport: passport, //use passport
                cookieParser: express.cookieParser,
                key:         'connect.sid',       // the name of the cookie where express/connect stores its session_id
                secret:      '1234',    // the session_secret to parse the cookie
                store:       sessionStore,        // we NEED to use a sessionstore. no memorystore please
                success: function (data, accept) {
                    console.log('successful connection to socket.io');

                    // The accept-callback still allows us to decide whether to
                    // accept the connection or not.
                    accept(null, true);
                },
                fail: function (data, message, error, accept) {
                    if(error)
                        throw new Error(message);
                    console.log('failed connection to socket.io:', message);

                    // We use this callback to log all of our failed connections.
                    accept(null, false);
                }
            }));

将passport var传递给passport socketio对象将解决此问题

 io.set('authorization', passportSocketIo.authorize({
                passport: passport, //use passport
                cookieParser: express.cookieParser,
                key:         'connect.sid',       // the name of the cookie where express/connect stores its session_id
                secret:      '1234',    // the session_secret to parse the cookie
                store:       sessionStore,        // we NEED to use a sessionstore. no memorystore please
                success: function (data, accept) {
                    console.log('successful connection to socket.io');

                    // The accept-callback still allows us to decide whether to
                    // accept the connection or not.
                    accept(null, true);
                },
                fail: function (data, message, error, accept) {
                    if(error)
                        throw new Error(message);
                    console.log('failed connection to socket.io:', message);

                    // We use this callback to log all of our failed connections.
                    accept(null, false);
                }
            }));

将passport var传递给passport socketio对象将解决此问题

 io.set('authorization', passportSocketIo.authorize({
                passport: passport, //use passport
                cookieParser: express.cookieParser,
                key:         'connect.sid',       // the name of the cookie where express/connect stores its session_id
                secret:      '1234',    // the session_secret to parse the cookie
                store:       sessionStore,        // we NEED to use a sessionstore. no memorystore please
                success: function (data, accept) {
                    console.log('successful connection to socket.io');

                    // The accept-callback still allows us to decide whether to
                    // accept the connection or not.
                    accept(null, true);
                },
                fail: function (data, message, error, accept) {
                    if(error)
                        throw new Error(message);
                    console.log('failed connection to socket.io:', message);

                    // We use this callback to log all of our failed connections.
                    accept(null, false);
                }
            }));

将passport var传递给passport socketio对象将解决此问题

 io.set('authorization', passportSocketIo.authorize({
                passport: passport, //use passport
                cookieParser: express.cookieParser,
                key:         'connect.sid',       // the name of the cookie where express/connect stores its session_id
                secret:      '1234',    // the session_secret to parse the cookie
                store:       sessionStore,        // we NEED to use a sessionstore. no memorystore please
                success: function (data, accept) {
                    console.log('successful connection to socket.io');

                    // The accept-callback still allows us to decide whether to
                    // accept the connection or not.
                    accept(null, true);
                },
                fail: function (data, message, error, accept) {
                    if(error)
                        throw new Error(message);
                    console.log('failed connection to socket.io:', message);

                    // We use this callback to log all of our failed connections.
                    accept(null, false);
                }
            }));
更新: 只需确保使用与passport socketio模块使用的passport相同的版本,目前是0.2.0版,您可能还需要升级passport facebook模块

旧帖子:

我也遇到了同样的问题,通过更改passport-socket.io index.js文件解决了这个问题:

var defaults = {
passport:     require('passport'),
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

将此默认配置更改为:

var defaults = {
passport:     null,
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

当然,只有当您像当前一样传递自己的passport对象时,这才有效。 这个问题与passport socketio有关,它要求passport模块覆盖req.login函数,我明天会更仔细地查看,以找出到底出了什么问题。

更新: 只需确保使用与passport socketio模块使用的passport相同的版本,目前是0.2.0版,您可能还需要升级passport facebook模块

旧帖子:

我也遇到了同样的问题,通过更改passport-socket.io index.js文件解决了这个问题:

var defaults = {
passport:     require('passport'),
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

将此默认配置更改为:

var defaults = {
passport:     null,
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

当然,只有当您像当前一样传递自己的passport对象时,这才有效。 这个问题与passport socketio有关,它要求passport模块覆盖req.login函数,我明天会更仔细地查看,以找出到底出了什么问题。

更新: 只需确保使用与passport socketio模块使用的passport相同的版本,目前是0.2.0版,您可能还需要升级passport facebook模块

旧帖子:

我也遇到了同样的问题,通过更改passport-socket.io index.js文件解决了这个问题:

var defaults = {
passport:     require('passport'),
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

将此默认配置更改为:

var defaults = {
passport:     null,
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

当然,只有当您像当前一样传递自己的passport对象时,这才有效。 这个问题与passport socketio有关,它要求passport模块覆盖req.login函数,我明天会更仔细地查看,以找出到底出了什么问题。

更新: 只需确保使用与passport socketio模块使用的passport相同的版本,目前是0.2.0版,您可能还需要升级passport facebook模块

旧帖子:

我也遇到了同样的问题,通过更改passport-socket.io index.js文件解决了这个问题:

var defaults = {
passport:     require('passport'),
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

将此默认配置更改为:

var defaults = {
passport:     null,
key:          'connect.sid',
secret:       null,
store:        null,
success:      function(data, accept){accept(null, true)},
fail:         function(data, message, critical, accept){accept(null, false)}
})

当然,只有当您像当前一样传递自己的passport对象时,这才有效。
问题与passport socketio有关,它要求passport模块覆盖req.login函数,我明天会更仔细地查看,以找出到底出了什么问题。

实际上,它并不能解决问题。为什么要解决这个问题呢?你能详细说明一下吗?我仍然收到同样的错误。提前感谢。实际上passport socketio使用旧版本的passport如果我们在其配置中设置passport,则passport socketio会自动设置依赖项。它默认为require('passport'),那么为什么它会使用旧版本的passport?不管怎样,当我尝试这个方法时,同样的错误信息仍然存在。事实上,它并不能解决问题。为什么要解决这个问题呢?你能详细说明一下吗?我仍然收到同样的错误。提前感谢。实际上passport socketio使用旧版本的passport如果我们在其配置中设置passport,则passport socketio会自动设置依赖项。它默认为require('passport'),那么为什么它会使用旧版本的passport?不管怎样,当我尝试这个方法时,同样的错误信息仍然存在。事实上,它并不能解决问题。为什么要解决这个问题呢?你能详细说明一下吗?我仍然收到同样的错误。提前感谢。实际上passport socketio使用旧版本的passport如果我们在其配置中设置passport,则passport socketio会自动设置依赖项。它默认为require('passport'),那么为什么它会使用旧版本的passport?不管怎样,当我尝试这个方法时,同样的错误信息仍然存在。事实上,它并不能解决问题。为什么要解决这个问题呢?你能详细说明一下吗?我仍然收到同样的错误。Tha