2012-06-17 4 views
13

proprio ieri su Heroku ho iniziato ad avere questo errore su twitter login in velocePassaporto-twitter: riuscito a trovare richiesta di token in sessione

Error: failed to find request token in session 
    at Strategy.<anonymous> (/app/node_modules/passport-twitter/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:120:54) 
    at Strategy.authenticate (/app/node_modules/passport-twitter/lib/passport-twitter/strategy.js:82:40) 
    at Passport.authenticate (/app/node_modules/passport/lib/passport/middleware/authenticate.js:153:14) 
    at callbacks (/app/node_modules/express/lib/router/index.js:272:11) 
    at param (/app/node_modules/express/lib/router/index.js:246:11) 
    at pass (/app/node_modules/express/lib/router/index.js:253:5) 
    at Router._dispatch (/app/node_modules/express/lib/router/index.js:280:4) 
    at Object.handle (/app/node_modules/express/lib/router/index.js:45:10) 
    at Context.next (/app/node_modules/express/node_modules/connect/lib/http.js:204:15) 
    at Context.<anonymous> (/app/node_modules/passport/lib/passport/context/http/actions.js:64:8) 

qualsiasi suggerimento?

risposta

18

YUHU Ho risolto. il problema era che alcune volte il mio sito web aveva www e qualche volta no, quindi c'erano problemi con le sessioni, apparentemente.

+3

Ecco [una sintesi di un percorso che ho utilizzato] (https://gist.github.com/htsh/5796569) per rimuovere i principali siti web dai nomi di dominio dopo l'esecuzione questo stesso problema con il passaporto –

2

Questo è del tutto casuale, e io sono un newb del nodo ... quindi applica il sale liberamente.

Stavo vedendo questo errore e una traccia di stack molto simile stasera, in realtà. Si è scoperto che avevo appena cambiato il mio percorso di autenticazione callback per assomigliare a questo:

app.use('/auth/twitter/callback', twitterCallback);

Vedi come ho usato use lì, invece di get? Una volta cambiato, ho smesso di ricevere questo errore.

mio stack trace sembrava un po 'diverso, però:

DEBUG: Error: failed to find request token in session at Strategy. (/Users/drhayes/src/incursion/node_modules/passport-twitter/node_modules/passport-oauth/lib/passport-oauth/strategies/oauth.js:122:54)
at Strategy.authenticate (/Users/drhayes/src/incursion/node_modules/passport-twitter/lib/passport-twitter/strategy.js:82:40)
at Passport.authenticate (/Users/drhayes/src/incursion/node_modules/passport/lib/passport/middleware/authenticate.js:153:14)
at Object.handle (native)
at next (/Users/drhayes/src/incursion/node_modules/express/node_modules/connect/lib/http.js:204:15)
at /Users/drhayes/src/incursion/node_modules/passport/lib/passport/middleware/authenticate.js:99:9
at /Users/drhayes/src/incursion/node_modules/passport/lib/passport/http/request.js:46:7
at pass (/Users/drhayes/src/incursion/node_modules/passport/lib/passport/index.js:229:30)
at /Users/drhayes/src/incursion/node_modules/passport/lib/passport/index.js:237:36
at /Users/drhayes/src/incursion/routes/auth.coffee:42:14

ha la vostra fonte cambiato di recente? C'è un bump di revisione nella slug implementata?

+0

cosa intendete per bump di revisione? Sì, cambio il codice di recente. Ho anche scoperto che se cancello tutte le sessioni memorizzate, non ottengo l'errore. – nick

+1

Siamo spiacenti, non le revisioni, ma le versioni. Controlla: https://devcenter.heroku.com/articles/releases Ogni volta che fai push su Heroku, incrementano il numero di rilascio. Puoi usarlo per effettuare il rollback dalla loro parte senza usare Git. –

+0

ok, capisco, ma questo non ha risolto il problema :( – nick

9

Ho anche riscontrato questo errore utilizzando Node.js, Express & Passport, sebbene la mia correzione fosse diversa da quelle descritte sopra.

avevo copiato e incollato il seguente codice dalla documentazione 'esprimere-session' ...

app.use(session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }})) 

Che sicura: vero po istruisce Express-sessione da usare 'https', che io don avere un setup nel mio ambiente di sviluppo Una volta rimosso, l'errore è andato via.

4

Nelle impostazioni app Twitters, garantire i seguenti campi hanno questi valori:

Sito web: http://127.0.0.1:3000

URL richiamata: http://127.0.0.1:3000/auth/twitter/callback

** Sto lavorando con il numero di porta 3000. Si potrebbe cambiare la situazione a qualsiasi porta con cui stai lavorando.

Ora passare a http://127.0.0.1:3000 nel browser. Questo dovrebbe risolvere il tuo problema.

+1

stavo ottenendo questo errore perché stavo facendo la richiesta a twitter da localhost: 9000 e dopo l'autenticazione, stava reindirizzando a 127.0.0.1:9000 che è un dominio diverso in modo che il cookie non sarà trovato come è stato impostato su localhost e non su 127.0.0.1 Sostituire localhost con 127.0.0.1 ha funzionato per me Grazie! – Larrydx

0

ho avuto questa volta, ho riparato cambiando la chiamata URL

da127.0.0.1

alocalhost

+0

Ho cambiato il mio URL cb in localhost, tuttavia Twitter continua a tornare a 127.0.0.1, forse ci vuole tempo per propagarsi. – Dercni

1

Twitter non accetta localhost così sono stato costretto a utilizzare le seguenti impostazioni:

In https://apps.twitter.com/app/ ....

website = http://127.0.0.1:3000 
callback url: http://localhost:3000/login/twitter/callback 

In passaporto :

'callbackURL'  : 'http://localhost:3000/login/twitter/callback' 

Nota: L'url Twitter richiamata funziona utilizzando sia 127.0.0.1 localhost &

1

Questa è una risposta molto tardi, ma ho appena pensato un altro motivo per cui questo può accadere. Quando i ragazzi che hanno fatto express-session hanno detto che MemoryStore non è pensato per la produzione, lo hanno davvero significato.

Se si utilizza il clustering, (pm2 o per sempre o in esecuzione su Heroku), gli archivi di cookie basati sulla memoria hanno una serie di problemi. Spesso perdi i cookie o li corrompi (perché ci sono due o più processi separati sul lato server, non condividendo la memoria comune).

Se si desidera eseguire la vostra applicazione Nodo con i cluster, è necessario utilizzare Redis o qualche biscotto DB-backed stoccaggio

1

ho usato il passaporto-flickr e risolto lo stesso problema modificando 127.0.0.1 a localhost

passport.use(new FlickrStrategy({ 
    ... 
    callbackURL: "http://localhost:3000/auth/flickr/callback" 
    },