배경 : 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