0

背景:SSLを処理するために、エクスプレスサーバーへのリバースプロキシとしてnginxを使用しています。私は Facebook の oauth を処理するために everyauth パッケージを使用しています。Redis はセッション ストアに使用されます。

問題getAccessToken: 最初の認証要求で、認証ステップで everyauth がタイムアウトします。2 番目の認証リクエストで、すべての認証ステップを完了して戻ります。

具体的には、 getAccessToken ステップで everyauth がリクエストパッケージを使用するところまで実行を追跡しました。Requestは https モジュールを使用して、返されないリクエストを作成します (コールバックは実行されません)。

コード

var express = require('express')
  , RedisStore = require('connect-redis')(express)
  , everyauth = require('everyauth')
  , Promise = everyauth.Promise
  , app = express.createServer()
  , authConfig = require('./auth_config');

// Configure server to allow reverse proxy (nginx) to handle SSL requests
app.enable('trust proxy');
app.set('env', process.env.npm_package_config_env);

//everyauth config
everyauth.facebook
    .appId(authConfig.facebook.appId)
    .appSecret(authConfig.facebook.appSecret)
    .redirectPath(authConfig.facebook.redirectPath)
    .scope(authConfig.facebook.scope)
    .popup(true)
    .findOrCreateUser(function(session, accessToken, accessTokExtra, fbUserMetadata){
        ...
    });

app.configure(function(){
    // Check if behind secure reverse-proxy
    app.use(require('./middleware/secureProxyCheck')());
    app.set('views', __dirname + '/views');
    app.set('view engine', 'jade');
    app.use(express.bodyParser());
    app.use(express.methodOverride());
    app.use(express.cookieParser());
    app.use(express.session({
        secret: 'imnottelling', 
        store: new RedisStore({ host: "127.0.0.1", port: "6379" }),
        cookie: { secure: true }
    }));
    //WARNING: do not change the order of everyauth and router
    app.use(everyauth.middleware());
    app.use(app.router);
    app.use(require("./middleware/dynamicCacheHeaders")("sha256"));
});

/*app.get app.listen beyond this point*/

バージョン

  • ノード: 0.8.8
  • エクスプレス: 2.5.10
  • 接続-redis: 1.4.4
  • エブリ認証: 0.3.0
4

1 に答える 1

0

この問題は、実際には上記の問題とは関係ありませんでした。この問題は、 daemon.nodeのドキュメントを十分に注意深く読んでいないことが原因で発生します。ノードが実行されなくなった前のプロセスにすべて関連付けられているため、最初は何も機能しません。デバッグは困難ですが、修正は非常に簡単です(ドキュメントをお読みください)。

于 2012-10-05T21:16:50.287 に答える