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