2014-09-17 17 views
5

Tek bir ekspres uygulamada iki farklı pasaporta ihtiyacım var (örneğin, kullanıcı & odası). Yani iki ayrı değişkenler tanımlar: o zamanPassportJS - Express uygulamasında birden fazla pasaport kullanma

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

, ben ayrı pasaport stratejileri ile onları başlatmaya:

// 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 

Son adım Ekspres katman olarak ayarlamaktır Ancak, ben bunu böyle yapsaydım, aslında roomPassport pasaportu geçersiz kılar ve iki nesne - req.user ve req.room yerine, sadece bir req.room'um var ama Kullanıcı bilgisi. Her bir pasaportun (kullanıcı veya oda) birbirinden bağımsız olarak kimlik doğrulaması yapılabileceğinin belirtilmesi önemlidir, yani her iki nesnenin de req.user ve req.room var olması gereken bir senaryo vardır.

Bu nasıl çözülür?

DÜZENLEME 1

Eh, birkaç saat sonra, öyle görünüyor ben application.use(roomPassport.initialize({ userProperty: "room" })); çağrısına sonra, pasaport nesneleri ayırmak zorunda olmasına rağmen, işler karıştığında bu - ve req.login() yöntem son ekli pasaport ile çalıştığı için bu . Dolayısıyla, doğru passport.serializeUser yöntemini çağırmak yerine, roomPassport.serializeUser yöntemini çağırır.

Sıradaki sorum - doğru yöntemi aramak için req.login() nasıl yapılır?

cevap

9

Sahip olduğunuz sorun, gerektiğinde passport modülünün anında bir Passport nesnesini dışa aktarmasıdır. Ve bu nesne gerektiğinde düğüm tarafından önbelleğe alındığından, her seferinde aynı nesneyi alırsınız.

Neyse ki, pasaport modülü ayrıca reference to the class verir, bunu yapabilirsiniz.

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

Artık iki tamamen ayrı pasaport nesnesi olmalıdır.

+0

Teşekkürler dostum, günümü kurtardın! Sorunumu çözüyor ama tamamen değil. Her iki şifre nesnesi de aynı çerezi geçersiz kıldığından, ayrı pasaportlara ihtiyacım olacak gibi görünüyor. Öyleyse bir sonraki sorumuz - iki ayrı oturum nasıl kurulur (muhtemelen onlara isim verir)? –

+0

Sadece yeni bir soru olarak buraya koydum http://stackoverflow.com/questions/25898629/passportjs-how-to-make-separate-passport-session –

+0

Hey, tavsiyelerinizi takip ettim ve ayrıca iki farklı pasaport yapılandırma dosyası oluşturdum. iki farklı yerel stratejiyi ele alalım. Ancak, orijinal olanı kullanarak giriş yapmayı denediğimde, "Bilinmeyen strateji yerel giriş" hatası vererek hata atar. – codeinprogress

İlgili konular