2014-09-17 3 views
5

하나의 빠른 응용 프로그램 내에 두 개의 다른 여권이 필요하다고 가정합니다 (예 : 사용자 & 회의실). 그래서 두 개의 별도 바르 정의 : 다음PassportJS - Express 응용 프로그램에서 여러 여권 사용

var passport = require('passport'); 
var roomPassport = require('passport'); 

을, 나는 별도의 여권 전략을 초기화 :

// required for passport 
application.use(session({ secret: 'ilovepassport;-)' })); // session secret 
application.use(passport.initialize({ userProperty: "user" })); 
application.use(passport.session()); // persistent login sessions 
application.use(roomPassport.initialize({ userProperty: "room" })); 
application.use(roomPassport.session()); // persistent login sessions 
application.use(flash()); // use connect-flash for flash messages stored in session` 

:

require('./config/passport')(passport); // pass passport for configuration 
require('./config/roompassport')(roomPassport); // pass passport for configuration 

마지막 단계는 익스프레스 미들웨어로 설정하는 것입니다 그러나, 내가 이것을 좋아한다면 실제로 여권 여권은 여권을 무시하고 req.user와 req.room이라는 두 개의 객체 대신에 하나의 req.room을 가지고 있지만 초기화되어 있습니다. 사용자 데이터.

각 여권 (사용자 또는 회의실)은 서로 독립적으로 인증 될 수 있습니다. 즉, req.userreq.room 개체가 모두 존재해야하는 시나리오가 있습니다.

해결 방법?

EDIT 1

글쎄, 몇 시간 후, 그것은 보인다 내가 application.use(roomPassport.initialize({ userProperty: "room" }));의 호출 후, 여권 객체를 분리 할 필요가 있지만, 상황이 혼란 얻을 - 그리고 req.login() 방법은 마지막으로 첨부 여권 작동 때문입니다 . 올바른 passport.serializeUser 메서드를 호출하는 대신 roomPassport.serializeUser 메서드를 호출합니다.

내 다음 질문 - req.login()을 올바른 방법으로 호출하는 방법?

답변

9

문제가 발생하면 Passport 모듈이 인스턴스화 된 Passport 개체를 필요할 때 내보낼 수 있습니다. 그리고 그 객체는 당신이 그것을 필요로 할 때 노드에 의해 캐쉬되기 때문에 매번 똑같은 객체를 얻습니다.

다행히도 여권 모듈은 reference to the class을 제공합니다. 이는 수행 할 수 있음을 의미합니다.

var Passport = require('passport').Passport, 
    passport = new Passport(), 
    roomPassport = new Passport(); 

이제 두 개의 완전히 다른 여권 개체가 있어야합니다.

+0

감사합니다. 친구, 내 하루를 저장했습니다. 그것은 내 문제를 해결하지만 완전히는 아닙니다. 별도의 passport.sessions가 필요합니다. 그렇지 않으면 두 암호 객체 모두 동일한 쿠키를 덮어 쓰기 때문입니다. 그래서 다음 질문은 - 두 개의 개별 세션을 설정하는 방법입니다 (아마도 이름을 지정하는 것일 수 있습니다). –

+0

그냥 새 질문으로 여기에 넣어 http://stackoverflow.com/questions/25898629/passportjs-how-to-make-separate-passport-session –

+0

안녕하세요, 귀하의 조언을 따라 또한 두 개의 다른 여권 구성 파일을 만든 2 개의 diff 지역 전략을 처리하십시오. 그러나 내가 원래 하나를 사용하여 로그인하려고하면 "Unknown strategy local-login"이라고 말하는 오류가 발생합니다. – codeinprogress

관련 문제