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

pig*_*ack 21 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)
Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

pig*_*ack 21

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

  • 这是[我使用过的路线的一个要点](https://gist.github.com/htsh/5796569),在与护照发生同样的问题后,从域名中删除了领先的www (3认同)

Gab*_*ner 12

我也使用Node.js,Express和Passport遇到了这个错误,虽然我的修复程序与上面描述的不同.

我从'express-session'文档中复制并粘贴了以下代码......

app.use(session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }}))
Run Code Online (Sandbox Code Playgroud)

那个安全:真位指示快递会话使用'https',我在开发环境中没有设置.一旦我删除它,错误就消失了.


Arn*_*pta 5

这是一个很晚的答案,但我只是想出了另一个可能发生这种情况的原因。当制作express-session 的人说 MemoryStore 不适用于生产时,他们是认真的。

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

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