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?
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. –