passport.socketio抛出此错误,但未能授权用户。
错误:错误:无法反序列化离开会话的用户
我已经把问题缩小到了passport.socketio的/lib/index.js。
在第59行
auth.passport.deserializeUser(userKey, function(err, user) {
if (err)
return auth.fail(data, err, true, accept);
...它会抛出那个错误。调试器告诉我userKey是有效的,并且应该反序列化用户。在我的主应用程序中,是相同的密钥,用于反序列化用户。(这是mongoDB对象的ID )。在我的主应用程序中,护照对用户的反序列化没有任何问题。(详细信息)所以不知道这为什么仍然会抛出错误。
这里传递的userKey与我的主要应用程序中用于反序列化的密钥护照相同。
我已经把userKey变成全局的,并把它放在我的主代码中
passport.deserializeUser(global.userKey, function(err, user) {
if (err)
return auth.fail(data, err, true, accept);
console.log('ok');这会导致无限循环(因为它在外部passport.deserialize内),但是iut打印'ok'!,所以我的主应用程序的护照至少可以很好地反序列化,使用index.js (passport.socketio\lib\index.js)不能使用的相同的东西!出于某种原因。
然后我甚至尝试将护照对象本身从主应用程序中传递出来
io.set('authorization', require('passport.socketio').authorize({
passport: passport,
...这实际上不会导致错误!但是我没有得到socket.handshake对象。
我没有更多的想法去诊断这件事了,我真的很想得到任何帮助。
是什么原因导致passport.socketio的passport不“反序列化用户会话之外的用户”?
发布于 2014-05-08 14:38:38
删除了npm_modules,用"every_package":"latest"重写了packages.json,因此基本上重新安装了每个包的最新版本。修好了。
发布于 2014-05-30 20:48:46
一个问题可能是,您已经将主应用程序中的“护照”实例配置为使用特定的“deserializeUser”实现。寻找所有的地方,你的护照已经在主应用程序。(如果它是一个类似于mean.io的框架,您将在config/passport.js中找到它)。
确保在套接字应用程序中对护照实例执行相同的初始化操作。将其传递给passportsocketio:
passportSocketIo.authorize({
passport: passport,
cookieParser: express.cookieParser,
key: 'connect.sid'
...
});https://stackoverflow.com/questions/23492459
复制相似问题