【发布时间】:2014-06-22 22:25:49
【问题描述】:
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)。我的主应用程序中的护照在反序列化用户时没有问题。 (details)
所以不知道为什么这仍然会引发错误。
此处传递的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 没有“反序列化用户退出会话”?
【问题讨论】:
标签: deserialization passport.js passport.socketio