2012-10-03 1 views
0

배경 : SSL을 처리하기 위해 익스프레스 서버에 리버스 프록시로 nginx를 사용하고 있습니다. 나는 facebook oauth를 다룰 때 everyauth 패키지를 사용한다. Redis는 세션 저장소로 사용됩니다.Everyauth.js가 첫 번째 인증 요청시 실패합니다.

문제 다음 getAccessToken 인증 단계에서 타임 아웃 할 everyauth 첫번째 인증 요청에서. 두 번째 인증 요청에서는 모든 인증 단계를 완료하고 반환합니다.

구체적 : I는 everyauth가 getAccessToken 단계 동안 요청 패키지를 사용하는 지점의 실행을 따랐다. 요청은 결코 반환하지 않는 요청을 만들기 위해 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
  • Everyauth : 0.3.0

답변

0

이 문제는 실제로 위에서 언급 한 것과 관련이 없습니다. 이 문제는 내가 daemon.node의 설명서를주의 깊게 읽지 않았기 때문에 발생합니다. 처음에는 노드가 더 이상 실행되지 않는 이전 프로세스에 묶여 있기 때문에 처음에는 아무 것도 작동하지 않습니다. 디버깅하기는 어렵지만 수정하기가 쉽습니다 (문서 읽기).