Załóżmy, że potrzebuję dwóch różnych paszportów w ramach jednej ekspresowej aplikacji (na przykład pokój użytkownika &). więc określić dwa oddzielne vars:PassportJS - Korzystanie z wielu paszportów w ramach aplikacji Express
var passport = require('passport');
var roomPassport = require('passport');
następnie zainicjować ich odrębnych strategii paszportowych:
require('./config/passport')(passport); // pass passport for configuration
require('./config/roompassport')(roomPassport); // pass passport for configuration
ostatnim krokiem jest ustawienie ich jako ekspresowe 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`
Jeśli jednak zrobię to w ten sposób, w zasadzie roomPassport zastępuje paszport i zamiast dwóch obiektów - req.user i req.room, mam tylko jeden pokój, ale zainicjowany dane użytkownika.
Należy wspomnieć, że każdy paszport (użytkownik lub pokój) może uwierzytelniać się niezależnie od siebie, tj. Istnieje scenariusz, w którym muszą istnieć oba obiekty req.user
i req.room
.
Jak rozwiązać ten problem?
EDIT 1
Cóż, po kilka godzin, wydaje się, że chociaż muszę oddzielne obiekty paszport, po wezwaniu application.use(roomPassport.initialize({ userProperty: "room" }));
, robi się bałagan - a to dlatego, req.login()
metoda działa z ostatnim załączonym paszportem . Zamiast więc wywoływać poprawną metodę, wywołuje ona metodę .
Moje następne pytanie - jak wprowadzić req.login()
w celu wywołania właściwej metody?
Dzięki stary, uratowałeś mi dzień! Rozwiązuje mój problem, ale nie całkowicie. Wygląda na to, że będę potrzebować osobnych paszportów, ponieważ w przeciwnym razie oba obiekty haseł będą miały pierwszeństwo przed tym samym plikiem cookie. Moje następne pytanie brzmi: jak ustawić dwie oddzielne sesje (prawdopodobnie je nazwać)? –
Po prostu stawiam to jako nowe pytanie tutaj http://stackoverflow.com/questions/25898629/passportjs-how-to-make-separate-passport-session –
Hej, poszedłem za twoją radą, a także stworzyłem dwa różne pliki konfiguracyjne paszportu obsłużyć dwie lokalne strategie diff. Jednak przy próbie zalogowania się przy użyciu oryginalnego błędu pojawia się komunikat "Nieznana strategia lokalnego logowania". – codeinprogress