2012-06-17 20 views
13

就在昨天請求令牌在Heroku我開始有明確護照嘰嘰喳喳:未能找到在會議

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) 

任何建議在twitter上登錄這個錯誤?

回答

18

YUHU我解決了。問題在於有時候我的網站有www,有時候不是,所以顯然會出現會話問題。

+3

這是我使用的路線的一個要點](https://gist.github.com/htsh/5796569)從領域名稱中刪除領先的www後跑到與護照相同的問題 –

2

這是完全隨機的,我是一個節點newb ...所以適用鹽寬鬆。

實際上,我發現這個錯誤和今晚非常類似的堆棧跟蹤。原來,我剛剛改變了我的身份驗證回調的路線是這樣的:

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

看我怎麼用use了,而不是get?一旦我將它改回來,我就停止了這個錯誤。

我的堆棧跟蹤看起來有點不同,雖然:

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

貴源最近改變了嗎?你部署的彈頭是否有修改凹凸?

+0

你是什麼意思修訂凹凸?是的,我最近更改了代碼。我還發現,如果我刪除存儲的所有會話,我不會收到錯誤。 – nick

+1

對不起,沒有修訂,但發佈。查看:https://devcenter.heroku.com/articles/releases每次你推到Heroku時,他們都會增加版本號。您可以使用它在不使用Git的情況下回滾。 –

+0

好的,我看到了,但是這並沒有解決問題:( – nick

9

我也遇到了使用Node.js,Express & Passport的錯誤,雖然我的修復與上面描述的不同。

我已經複製並粘貼從「表達會話」文檔下面的代碼...

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

安全:真位指示明確,會話使用的「https」,這我不在我的開發環境中沒有安裝。一旦我刪除它,錯誤消失了。

4

在Twitter的應用程序設置,確保以下字段有下列值:

網站:http://127.0.0.1:3000

回調網址:http://127.0.0.1:3000/auth/twitter/callback

**我與端口號3000的工作你可以改變到你正在使用的任何端口。

現在,導航到http://127.0.0.1:3000在您的瀏覽器。這應該可以解決你的問題。

+1

我得到這個錯誤,因爲我從localhost:9000發出請求到twitter,並且在身份驗證之後,它被重定向回到127.0.0.1:9000,這是一個不同的域,所以cookie將不會被發現因爲它是在本地主機上設置的,而不是127.0.0.1。用127.0.0.1替換localhost對我有用。謝謝! – Larrydx

0

我有這個有一次,我從127.0.0改變回調URL

固定它。1

本地主機

+0

我已經將我的cb url更改爲localhost,但twitter一直回到127.0.0.1,可能需要一段時間才能傳播。 – Dercni

1

,所以我被迫使用以下設置的Twitter不接受本地主機:

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

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

在護照:

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

注:Twitter的回調URL作品同時使用127.0.0.1 &本地主機

1

這是一個非常晚的答案,但我只是想出另一個原因,這可能發生。 當製作快速會話的人表示MemoryStore不適合製作時,他們確實是這樣做的。

如果您正在使用羣集(pm2或永久或在Heroku上運行),則基於內存的Cookie存儲具有自己的一組問題。您經常會丟失cookie或損壞它們(因爲服務器端有兩個或更多獨立進程,不共享公共內存)。

如果你想運行與羣集節點的應用程序,你需要使用Redis的或一些DB支持的cookie存儲

1

我用護照Flickr和通過改變127.0.0.1固定同樣的問題localhost

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