Passport-twitter:在会话中找不到请求令牌

就在昨天在Heroku我开始有这个错误在微博login快递

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) 

有什么build议?

YUHU我解决了。 问题是有时候我的网站有www,有时候不是,所以显然有会话的问题。

我也遇到了这个错误使用Node.js,快递和护照,虽然我的解决scheme是不同于上述。

我已经从“快速会话”文档复制并粘贴了以下代码…

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

这是安全的:真正的位指示快速会话使用“https”,我没有在我的开发环境中设置。 一旦我删除它,错误消失了。

在Twitters应用程序设置中,确保以下字段具有以下值:

url: http : //127.0.0.1 : 3000

回拨url: http : //127.0.0.1 : 3000/auth/twitter/ callback

**我正在使用端口号3000.您可以将其更改为您正在使用的任何端口。

现在,在浏览器中导航到http://127.0.0.1:3000 。 这应该可以解决你的问题。

这是完全随机的,我是一个节点newb …所以适用盐宽松。

实际上,我今天看到这个错误和一个非常类似的堆栈跟踪。 原来,我刚刚改变了我的authcallback路线看起来像这样:

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

你的来源最近改变了吗? 在你的部署slug有没有修改凹凸?

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' 

注意:twittercallbackurl同时使用127.0.0.1和localhost

这是一个非常晚的答案,但我只是想到可能发生的另一个原因。 当快速会议的人说,MemoryStore不是为了生产,他们真的是这个意思。

如果你正在使用集群,(pm2或永远或在Heroku上运行),那么基于内存的cookie存储有自己的一套问题。 你会经常丢失cookie或损坏它们(因为在服务器端有两个或多个单独的进程,不共享公用内存)。

如果您想要使用群集来运行Node应用程序,则需要使用Redis或一些DB支持的cookie存储

我使用passport-flickr并通过将127.0.0.1更改为localhost来修复相同的问题

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

我曾经有一次,我通过更改回拨URL来修复它

127.0.0.1

本地主机

在我的情况下,这是由于反向代理和安全的cookie。 设置app.set('trust proxy', 1)解决了这个问题。

https://github.com/expressjs/session/issues/281#issuecomment-191327863