首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >session的护照“未能反序列化会话外的用户”。但是我的主应用程序中的护照(用相同的键)反序列化很好。

session的护照“未能反序列化会话外的用户”。但是我的主应用程序中的护照(用相同的键)反序列化很好。
EN

Stack Overflow用户
提问于 2014-05-06 10:43:02
回答 2查看 2.9K关注 0票数 2

passport.socketio抛出此错误,但未能授权用户。

错误:错误:无法反序列化离开会话的用户

我已经把问题缩小到了passport.socketio的/lib/index.js

在第59行

代码语言:javascript
复制
  auth.passport.deserializeUser(userKey, function(err, user) {
    if (err)
      return auth.fail(data, err, true, accept);
    ...

它会抛出那个错误。调试器告诉我userKey是有效的,并且应该反序列化用户。在我的主应用程序中,是相同的密钥,用于反序列化用户。(这是mongoDB对象的ID )。在我的主应用程序中,护照对用户的反序列化没有任何问题。(详细信息)所以不知道这为什么仍然会抛出错误。

这里传递的userKey与我的主要应用程序中用于反序列化的密钥护照相同。

我已经把userKey变成全局的,并把它放在我的主代码中

代码语言:javascript
复制
  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)不能使用的相同的东西!出于某种原因。

然后我甚至尝试将护照对象本身从主应用程序中传递出来

代码语言:javascript
复制
io.set('authorization', require('passport.socketio').authorize({
    passport: passport,
    ...

这实际上不会导致错误!但是我没有得到socket.handshake对象。

我没有更多的想法去诊断这件事了,我真的很想得到任何帮助。

是什么原因导致passport.socketiopassport不“反序列化用户会话之外的用户”?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-08 14:38:38

删除了npm_modules,用"every_package":"latest"重写了packages.json,因此基本上重新安装了每个包的最新版本。修好了。

票数 3
EN

Stack Overflow用户

发布于 2014-05-30 20:48:46

一个问题可能是,您已经将主应用程序中的“护照”实例配置为使用特定的“deserializeUser”实现。寻找所有的地方,你的护照已经在主应用程序。(如果它是一个类似于mean.io的框架,您将在config/passport.js中找到它)。

确保在套接字应用程序中对护照实例执行相同的初始化操作。将其传递给passportsocketio:

代码语言:javascript
复制
passportSocketIo.authorize({
        passport: passport,
        cookieParser: express.cookieParser,
        key: 'connect.sid'
        ...
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23492459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档