2015-01-09 9 views
5

Mam konfiguracji mojego facebook uwierzytelniania za passportjs docs:Jaki jest najlepszy sposób dynamicznego określania adresu URL przekierowania dla strategii OAuth w pliku passport.js?

var passport = require('passport') 
    , FacebookStrategy = require('passport-facebook').Strategy; 

passport.use(new FacebookStrategy({ 
    clientID: FACEBOOK_APP_ID, 
    clientSecret: FACEBOOK_APP_SECRET, 
    callbackURL: "http://www.example.com/facebook/callback" 
    }, 
    function(accessToken, refreshToken, profile, done) { ... }); 
    } 
)); 

app.get('/login/facebook', passport.authenticate('facebook')) 
    .get('/facebook/callback', passport.authenticate('facebook', {successRedirect: '/', failureRedirect: '/login'})); 

Wszystko to działa prawidłowo. Istnieją jednak przypadki (takie jak wygaśnięcie tokena), gdy chcę automatycznie przekierować użytkownika na stronę, na której był użytkownik przed zainicjowaniem żądania logowania. Tak więc próbowałem wytworzyć parametr ciągu zapytań poprzez żądanie logowania (od klienta do serwera, do Facebooka iz powrotem). Ale nie widzę sposobu, aby to określić w callbackURL.

Ponadto, gdy próbowałem zakodować kodowanie niektórych kontekstów do callbackURL config (np: "http://www.example.com/facebook/callback?redir=lastUserPage") otrzymuję błąd analizy OAuth. Co ciekawe, Facebook reaguje prawidłowo z kodem dostępu, jak również param redir, ale nie jest on z wyjątkiem OAuth:

FacebookTokenError: Error validating verification code. Please make sure your redirect_uri is identical to the one you used in the OAuth dialog request 
    at Strategy.parseErrorResponse (C:\Sources\node_modules\passport-facebook\lib\strategy.js:198:12) 
    at Strategy.OAuth2Strategy._createOAuthError (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:345:16) 
    at C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\lib\strategy.js:171:43 
    at C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:177:18 
    at passBackControl (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:124:9) 
    at IncomingMessage.<anonymous> (C:\Sources\node_modules\passport-facebook\node_modules\passport-oauth2\node_modules\oauth\lib\oauth2.js:143:7) 
    at IncomingMessage.emit (events.js:117:20) 
    at _stream_readable.js:943:16 
    at process._tickCallback (node.js:419:13) 

Zauważ, że miałem ten jest wykonywana przy użyciu WIF wcześniej. Nie widzę żadnych obaw związanych z bezpieczeństwem podczas przekazywania dodatkowych parametrów ciągu zapytania przez proces OAuth.

Masz pomysł, jak mogę to zmienić?

Odpowiedz

0

nie jestem pewien jak to zrobić to pytasz, ale do zamierzonego celu końcowego możesz:

  1. Zapisz plik cookie uwierzytelniania przed
  2. uwierzytelnienia użytkownika
  3. na otrzymaną stronę wywołania zwrotnego, sprawdź plik cookie i przekierowanie, jeśli istnieje.

Czy to nie działałoby tak łatwo?

+0

W moim scenariuszu zapisanie stanu w pliku cookie było problematyczne z różnych powodów. W każdym razie okazało się, że można to zrobić za pomocą parametru stanu strategii. –

Powiązane problemy