Everyauth.js не работает при первом запросе аутентификации

Предыстория: я использую nginx в качестве обратного прокси-сервера для своего экспресс-сервера для обработки SSL. Я использую пакет Everyauth для работы с Facebook oauth. Redis используется для хранения сеансов.

Проблема: при первом запросе аутентификации время ожидания каждой аутентификации истекает на шаге getAccessToken аутентификации. При втором запросе аутентификации он завершит все шаги аутентификации и вернется.

В частности: я проследил за выполнением до того момента, когда каждая авторизация использует пакет request на этапе getAccessToken. 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
  • подключить-редис: 1.4.4
  • Каждая авторизация: 0.3.0

person Oliver Law    schedule 03.10.2012    source источник


Ответы (1)


Эта проблема на самом деле не была связана ни с чем упомянутым выше. Проблема вызвана тем, что я недостаточно внимательно прочитал документацию по daemon.node. Ничто не работает с первого раза, потому что все они привязаны к предыдущему процессу, в котором узел больше не работает. Трудно отлаживать, но очень легко исправить (ПРОЧИТАЙТЕ ДОКУМЕНТАЦИЯ).

person Oliver Law    schedule 05.10.2012