护照推特:无法在会话中找到请求令牌
Passport-twitter: failed to find request token in session
就在昨天的 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)
有什么建议吗?
玉湖 我解决了。 问题是有时我的网站有 www,有时没有,所以显然会话存在问题。
我在使用Node.js,Express & Passport时也遇到了此错误,尽管我的修复与上述不同。
我从"快速会话"文档中复制并粘贴了以下代码......
app.use(session({ secret: 'keyboard cat', key: 'sid', cookie: { secure: true }}))
该安全:true 位指示 express-session 使用"https",我在开发环境中没有设置。 一旦我删除了它,错误就消失了。
很晚的答案,但我只是想出了另一个原因。当制作 express-session 的人说 MemoryStore 不是用于生产的时,他们真的是认真的。
如果您使用的是集群(pm2 或永久或在 Heroku 上运行),那么基于内存的 cookie 存储有其自身的一系列问题。您经常会丢失 cookie 或损坏它们(因为服务器端有两个或多个独立的进程,不共享公共内存)。
如果要使用集群运行 Node 应用程序,则需要使用 Redis 或一些数据库支持的 cookie 存储
在 Twitter 应用设置中,确保以下字段具有这些值:
网站 : http://127.0.0.1:3000
回调网址 : http://127.0.0.1:3000/auth/twitter/callback
**我正在使用端口号 3000。 您可以将其更改为您正在使用的任何端口。
现在,导航到浏览器中的 http://127.0.0.1:3000。 这应该可以解决您的问题。
就我而言,这是由于反向代理和安全cookie。设置app.set('trust proxy', 1)
可解决此问题。
https://github.com/expressjs/session/issues/281#issuecomment-191327863
这是完全随机的,我是节点新手...所以要大量地撒盐。
实际上,今晚我看到了此错误和非常相似的堆栈跟踪。原来我刚刚将我的身份验证回调路由更改为如下所示:
app.use('/auth/twitter/callback', twitterCallback);
看看我如何在那里使用use
而不是get
?一旦我把它改回来,我就不再收到这个错误了。
不过,我的堆栈跟踪看起来有点不同:
DEBUG: Error: failed to find request token in session
at Strategy.<anonymous> (/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 中是否有修订凸起?
我有同样的问题,解决方案是,使用 http://127.0.0.1:3000/而不是 http://localhost:3000,当请求发生时,一切正常。
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 和 localhost
我使用passport-flickr并通过将127.0.0.1更改为localhost来解决相同的问题
passport.use(new FlickrStrategy({
...
callbackURL: "http://localhost:3000/auth/flickr/callback"
},
sameSite
似乎是另一个罪魁祸首。从
const SESSION_OPTIONS = {
...
cookie: {
sameSite: true,
},
};
自
const SESSION_OPTIONS = {
...
cookie: {
sameSite: app.get('env') === 'production' ? true : false,
},
};
为我做了这个把戏。
我曾经遇到过这个,我通过更改回调 URL 来修复它
从 127.0.0.1
到 本地主机
同样的症状(没有请求令牌),但在这里尝试其他解决方案没有帮助(secure: false
、localhost
vs 127.0.0.1
等)
事实证明,问题是由使用cookie-session
时不正确的cookie配置引起的。就我而言,我为expires
选项传递了一个数字,但该选项需要一个日期。改用maxAge
,这需要一个数字。
- 使用Javascript获取Twitter访问令牌
- FB.login访问令牌facebook javascript SDK
- 在每个 AJAX 请求(Sencha Touch 2)中发送用户详细信息(会话令牌)
- 如何设置会话 Cookie 以保护和使用 CSRF 令牌
- 护照推特:无法在会话中找到请求令牌
- 从 aws cognito 检索访问令牌、秘密访问密钥和会话令牌
- 如何将誓言令牌推送到本地存储或本地会话并监听存储事件?(SoundCloud Php/JS 错误解决方法)
- 是否可以使用(加密强)会话cookie作为CSRF令牌
- 如何在会话令牌过期时将用户重定向到登录页面
- 使用parse.com验证会话令牌时出现意外行为
- 正在创建具有会话令牌生成功能的用户
- 通过令牌进行身份验证,如果令牌失败,则使用Passport通过会话进行身份验证
- 如果我使用基于令牌的身份验证,我还需要会话吗?
- 会话ID和令牌从PHP到Javascript到PHP (xmlHTTPRequest)
- AngularJS安全令牌vs会话
- 如何使用Facebook PHP SDK 3.0正确处理会话和访问令牌
- 在会话之间使用刷新令牌
- 我们如何使用openTok连接为单个会话生成的不同令牌的视频流
- 我们如何使用openTok连接为单个会话生成的不同令牌的视频流
- 如果我在JS中存储一个静态会话令牌以供AJAX使用,它对CSRF是否安全?