Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Passport twitter:在会话中找不到请求令牌_Javascript_Node.js_Passport.js - Fatal编程技术网

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

Javascript Passport twitter:在会话中找不到请求令牌,javascript,node.js,passport.js,Javascript,Node.js,Passport.js,就在昨天,在Heroku上,我在express的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

就在昨天,在Heroku上,我在express的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)
错误:在会话中找不到请求令牌
在战略方面。(/app/node_modules/passport twitter/node_modules/passport oauth/lib/passport oauth/strategies/oauth.js:120:54)
在Strategy.authenticate(/app/node_modules/passport-twitter/lib/passport-twitter/Strategy.js:82:40)
在Passport.authenticate(/app/node\u modules/Passport/lib/Passport/middleware/authenticate.js:153:14)
在回调时(/app/node\u modules/express/lib/router/index.js:272:11)
at param(/app/node_modules/express/lib/router/index.js:246:11)
通过时(/app/node\u modules/express/lib/router/index.js:253:5)
路由器调度(/app/node\u modules/express/lib/Router/index.js:280:4)
在Object.handle(/app/node\u modules/express/lib/router/index.js:45:10)
在Context.next(/app/node_modules/express/node_modules/connect/lib/http.js:204:15)
在上下文中。(/app/node_modules/passport/lib/passport/context/http/actions.js:64:8)

有什么建议吗?

这完全是随机的,我是一个节点新手。。。所以要大量地加盐

实际上,今晚我看到了这个错误和一个非常相似的堆栈跟踪。事实证明,我刚刚更改了身份验证回调路径,如下所示:

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  
DEBUG:错误:在会话中找不到请求令牌
在战略方面。(/Users/drhayes/src/incrusion/node_modules/passport twitter/node_modules/passport oauth/lib/passport oauth/strategies/oauth.js:122:54)
在Strategy.authenticate(/Users/drhayes/src/incrusion/node_modules/passport-twitter/lib/passport-twitter/Strategy.js:82:40)
在Passport.authenticate(/Users/drhayes/src/incrusion/node_modules/Passport/lib/Passport/middleware/authenticate.js:153:14)
at Object.handle(本机)
接下来(/Users/drhayes/src/incrusion/node_modules/express/node_modules/connect/lib/http.js:204:15)
at/Users/drhayes/src/incrusion/node_modules/passport/lib/passport/middleware/authenticate.js:99:9
at/Users/drhayes/src/incrusion/node_modules/passport/lib/passport/http/request.js:46:7
通过时(/Users/drhayes/src/invision/node_modules/passport/lib/passport/index.js:229:30)
at/Users/drhayes/src/incrusion/node_modules/passport/lib/passport/index.js:237:36
at/Users/drhayes/src/invision/routes/auth.coffee:42:14

你的来源最近有变化吗?部署的slug中是否存在修订碰撞?

我已解决YUHU问题。问题是,有时我的网站有www,有时没有,因此显然会出现会话问题。

我在使用Node.js、Express&Passport时也遇到了这个错误,尽管我的修复方法与上面描述的不同

我从“express session”文档中复制并粘贴了以下代码

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

secure:truebit指示express会话使用“https”,这在我的开发环境中没有设置。一旦我删除了它,错误就消失了。

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

网站:

回调URL:

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


现在,在浏览器中导航到。这应该可以解决您的问题。

我有一次这样做,我通过更改回拨URL来修复它

127.0.0.1开始


localhost

Twitter不接受localhost,因此我被迫使用以下设置:

护照:

'callbackURL'       : 'http://localhost:3000/login/twitter/callback'

注意:twitter回调url同时使用127.0.0.1和localhost这是一个非常晚的答案,但我刚刚找到了另一个可能发生这种情况的原因。 当制作express session的人说MemoryStore不是用于制作的时候,他们是认真的

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


如果你想用集群运行你的节点应用程序,你需要使用Redis或一些DB支持的cookie存储

我使用passport flickr,通过将127.0.0.1更改为localhost解决了同样的问题

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

在我的例子中,这是由于反向代理和安全cookie。设置
app.set('trust proxy',1)
可解决此问题


我也有同样的问题,解决方案是,使用站点,当请求发生时,一切正常。

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

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

为我做了这个把戏。

我也有同样的症状(没有请求令牌),但在这里尝试其他解决方案没有帮助(
安全:false
本地主机
vs
127.0.0.1
,等等)


结果表明,问题是由于使用
cookie会话时cookie配置不正确造成的。在我的例子中,我为
expires
选项传递了一个数字,但该选项需要一个日期。改为使用
maxAge
,这需要一个数字。

你说的修订凹凸是什么意思?是的,我最近更改了代码。我还发现,如果我删除所有存储的会话,我不会得到错误。对不起,不是修订,而是发布。检查:每次你推到Heroku,他们都会增加发行号。你可以在不使用Git的情况下使用它来回滚他们的域名。在使用passportI遇到同样的问题后,这里是从域名中删除领先的www。我已经将我的cb url更改为localhost,但是twitt
const SESSION_OPTIONS = {
  ...
  cookie: {
    sameSite: true,
  },
};
const SESSION_OPTIONS = {
  ...
  cookie: {
    sameSite: app.get('env') === 'production' ? true : false,
  },
};