Supponiamo ho bisogno di due passaporti diversi all'interno di un Application Express (ad esempio utente & camera). Così mi definisco due Vars distinte:PassportJS - Utilizzo di più passaporti entro Application Express
var passport = require('passport');
var roomPassport = require('passport');
allora, li ho inizializzo con le strategie di passaporto separati:
require('./config/passport')(passport); // pass passport for configuration
require('./config/roompassport')(roomPassport); // pass passport for configuration
l'ultimo passo è quello di impostare loro come espresso middleware:
// 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`
tuttavia, se l'ho fatto in questo modo, in effetti roomPassport ha la precedenza sul passaporto e invece di avere due oggetti - req.user e req.room, ho ottenuto solo un req.room ma inizializzato con dati utente.
È importante ricordare che ciascun passaporto (utente o locale) potrebbe autenticarsi indipendentemente l'uno dall'altro, ovvero esiste uno scenario in cui devono esistere entrambi gli oggetti req.user
e req.room
.
Come risolvere questo?
EDIT 1
Bene, dopo qualche ora in più, sembra che anche se devo separare gli oggetti del passaporto, dopo la chiamata di application.use(roomPassport.initialize({ userProperty: "room" }));
, le cose ottenere disordinato - e questo perché req.login()
metodo funziona con l'ultimo passaporto allegato . Quindi, invece di chiamare il metodo corretto passport.serializeUser
, chiama il metodo roomPassport.serializeUser
.
mia prossima domanda - come fare req.login()
di chiamare il metodo giusto?
Grazie amico, mi hai salvato la giornata! Risolve il mio problema ma non completamente. Sembra, che avrò bisogno di passport.sessions separati, poiché altrimenti gli oggetti password sostituiranno lo stesso cookie. Quindi la mia prossima domanda è: come impostare due sessioni separate (probabilmente nominarle)? –
L'ho appena messo come nuova domanda qui http://stackoverflow.com/questions/25898629/passportjs-how-to-make-separate-passport-session –
Ehi, ho seguito il tuo consiglio e ho anche creato due diversi file di configurazione del passaporto per gestire le due strategie locali diff. Tuttavia, quando provo ad accedere utilizzando quello originale, si genera un errore che dice "Script locale sconosciuto". – codeinprogress