2

さて、これで壁に頭をぶつけます。私はeveryauthからpassportjsに切り替えたところ、Valumsファイルアップローダーの実装を除いて、すべてうまくいきました.

https://gist.github.com/4066155で、私の fileuploader コードの Gist を確認できます。

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()); をコメントアウトすると、- ファイル アップローダーは正常に動作しているようです。問題が発生していないため、passport.initialize はそのまま使用できます。

私のコードで passport.session を使用し続けると、アップロード呼び出しが行われ、実際には tmp ディレクトリに一時ファイルが作成されますが、ゼロバイトのままです。サーバーは Web クライアントに応答せず (コールバックなし)、ファイルが fs によって実際に書き込まれることはありません。

正しい方向へのポインターでさえ、非常に役立つ場合があります。さらにコンテキストが必要な場合はお知らせください。ありがとう。

アップデート:

それが役立つ場合は、 req 変数を比較して、passport.session が呼び出されていない場合と、passport.session が呼び出されている場合の違いを確認しました。最初の差分は、passport.session が呼び出されていない場合と、2 番目の差分が呼び出された場合です。URL: http://diffchecker.com/Xk8g434Q - 469 行目はイベントがバインドされていることを示しており、2 番目のテキスト ブロックではイベントが {} (空) になっています。

4

2 に答える 2

1

passport.session()メソッドは your を呼び出します。passport.deserializeUser()これは通常、ユーザーを取得するためにデータベース呼び出しを行います。このデータベース呼び出しは、着信データのリッスンを開始するコードの実行を遅らせます。つまり、誰もリッスンしていない間にデータが到着します。

于 2013-04-26T11:52:32.380 に答える
0

誰かがこれを経験した場合、1 つの回避策は、理想的ではありませんが、PassportJS セッション ミドルウェアの周りにミドルウェアのレイヤーを追加することです。明らかにファイルのアップロードを認証するつもりはありませんが、これまでのところ誰も私の質問に答えていません。競合する理由を見つけることができませんでした。

Express の app.configure( function () { app.use(passport.initialize()) の直後に配置できるコードを次に示します。

  var sessionMiddleware = passport.session()

  app.use(function(req, res, next) {
    if (req.url.match("/upload")) return next()
    console.log("Using session", req.url)
    sessionMiddleware(req, res, next)
  })
于 2012-11-17T15:14:50.160 に答える