node.js - PassportJs 的 Passport.session() 与文件 uploader 冲突 - 不会写入文件

标签 node.js express passport.js valums-file-uploader

好吧,在这件事上我的头撞到了墙上。我刚刚从 everyauth 切换到 Passportjs,一切都很顺利,除了我实现的 Valums 文件 uploader 。

您可以在https://gist.github.com/4066155查看我的文件 uploader 代码的要点

我的 Express app.configure 如下所示:

app.configure( function () {
  app.use(express.methodOverride());
  app.use(express.static(__dirname + '/public'));
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.set('view options', {
    layout: false
  });
  app.use(passport.initialize());
  app.use(passport.session());
});

奇怪的是,如果我注释掉 app.use(passport.session()); - 文件 uploader 似乎工作正常。 Passport.initialize 可以保留,因为它不会造成任何问题。

如果我在代码中保留 use Passport.session,上传调用就会通过,它实际上会在我的 tmp 目录中创建一个临时文件,但它保持为零字节。服务器永远不会响应 Web 客户端(无回调),文件也不会真正由 fs 写入。

即使是指向正确方向的指针也可能非常有帮助。如果您需要更多背景信息,请告诉我。谢谢。

更新:

如果有帮助的话,我比较了 req 变量,以查看未调用passport.session 时与调用passport.session 时的差异。第一个差异是在 Passport.session 未调用时,第二个差异是在调用时。网址:http://diffchecker.com/Xk8g434Q - 第 469 行很有趣,它显示了正在绑定(bind)的事件,然后在第二个文本 block 中,事件只是 {}(空)。

最佳答案

passport.session() 方法调用您的 passport.deserializeUser(),它本身通常会进行数据库调用来获取用户。此数据库调用会延迟开始监听传入数据的代码的执行。也就是说,数据在没有人监听的情况下到达。

关于node.js - PassportJs 的 Passport.session() 与文件 uploader 冲突 - 不会写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13363110/

相关文章:

javascript - 在NodeJS中获取Mongo数据库中插入文档的_id

javascript - 为什么 plyr 没有在任何浏览器中以全屏模式全屏播放视频

javascript - 将 Node 路由与 Backbone 路由绑定(bind)

node.js - 如何显示弹出窗口而不是重定向到 Facebook?

node.js - 快速 session 和 Passport : req. isAuthenticated() 登录后返回 false

angularjs - 使用 passport-http Basic + passport-local 组合时如何防止 www-authenticate header

node.js - Lambda 函数不执行 http.get

node.js - 从 'crypto' 迁移到 crypto-js 库 : Binary encoding

javascript - Express.js 响应发送回调

javascript - 如何在nodejs中实现passportjs中的用户角色