2015-01-09 11 views
5

Ho installato il mio facebook autenticazione per passportjs docs:Qual è il modo migliore per specificare in modo dinamico l'URL di reindirizzamento per le strategie OAuth in 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'})); 

Tutto questo funziona bene. Tuttavia, ci sono casi (come la scadenza del token) quando voglio reindirizzare automaticamente l'utente alla pagina che l'utente era attivo prima di avviare la richiesta di accesso. Così ho provato a scandagliare una stringa di parametri param attraverso la richiesta di accesso (da client a server a facebook e viceversa). Ma non vedo un modo per specificarlo nel callbackURL.

Inoltre, quando ho provato a codificare manualmente alcuni parametri di contesto nel config callbackURL (ad esempio: "http://www.example.com/facebook/callback?redir=lastUserPage"), ricevo un errore di analisi OAuth. È interessante notare che, Facebook fa rispondere correttamente con il codice di accesso così come il param redir, ma non riesce ad eccezione 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) 

Si noti che ho avuto questo lavoro utilizzando WIF prima. Non vedo alcun problema di sicurezza con il passaggio di ulteriori parametri di stringa di query tramite il processo OAuth.

Qualche idea su come posso superare questo?

risposta

0

io non sono sicuro di come fare quello che stai chiedendo, ma per il tuo obiettivo finale desiderato si potrebbe:

  1. Salva un cookie prima di autenticare
  2. autenticare l'utente
  3. sulla risultante pagina di richiamata, controllare il cookie e reindirizzare se presente.

Non avrebbe funzionato altrettanto facilmente?

+0

Nel mio scenario, il salvataggio dello stato in un cookie era problematico per una serie di motivi. In ogni caso, ho scoperto che questo può essere fatto usando il parametro di stato della strategia. –

Problemi correlati