背景: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