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

时间:2012-06-17 23:33:44

标签: javascript node.js passport.js

昨天在Heroku上我开始在twitter登录快递

时出现此错误
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)

任何建议?

12 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:10)

我也使用Node.js,Express&amp; amp;护照,虽然我的修复与上述不同。

我复制并粘贴了以下代码来自&#39; express-session&#39;文档...

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

secure:true 位指示快进会话使用&#39; https&#39;,我在开发环境中没有设置。一旦我删除它,错误就消失了。

答案 2 :(得分:4)

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

网站:http://127.0.0.1:3000

回调网址:http://127.0.0.1:3000/auth/twitter/callback

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

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

答案 3 :(得分:2)

这是完全随机的,我是Node newb ...所以请大量使用盐。

实际上,我今晚看到了这个错误和非常相似的堆栈跟踪。事实证明我刚刚改变了我的auth回调路线,看起来像这样:

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中是否有修订版块?

答案 4 :(得分:2)

这是一个非常晚的答案,但我只是想到了这可能发生的另一个原因。 当那些发表快速会话的人说MemoryStore不适合制作时,他们真正意味着它。

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

如果您想使用群集运行Node应用程序,则需要使用Redis或某些支持数据库的cookie存储

答案 5 :(得分:1)

Twitter不接受localhost所以我被迫使用以下设置:

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回调网址使用127.0.0.1&amp;本地主机

答案 6 :(得分:1)

我使用了passport-flickr并通过将 127.0.0.1 更改为 localhost

来解决同样的问题
passport.use(new FlickrStrategy({
    ...
    callbackURL: "http://localhost:3000/auth/flickr/callback"
  },

答案 7 :(得分:1)

就我而言,这是由于反向代理和安全cookie。设置app.set('trust proxy', 1)可以解决问题。

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

答案 8 :(得分:1)

我遇到了同样的问题,解决方法是,在请求发生时,一切正常,使用http://127.0.0.1:3000/代替http://localhost:3000进入站点。

答案 9 :(得分:0)

我有过一次,我通过更改回拨网址

来修复它 来自 127.0.0.1

localhost

答案 10 :(得分:0)

sameSite似乎是另一个罪魁祸首。来自

const SESSION_OPTIONS = {
  ...
  cookie: {
    sameSite: true,
  },
};

const SESSION_OPTIONS = {
  ...
  cookie: {
    sameSite: app.get('env') === 'production' ? true : false,
  },
};

是我的把戏。

答案 11 :(得分:0)

对我来说,症状相同(没有请求令牌),但尝试此处的其他解决方案没有帮助({secure: falselocalhost127.0.0.1等)

原来是由于使用cookie-session时cookie配置错误引起的。就我而言,我为expires选项传递了一个数字,但是该选项需要一个日期。改为改为使用maxAge,它需要一个数字。