首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport-Twitter - Error:无法在会话中找到请求令牌

Passport-Twitter - Error:无法在会话中找到请求令牌
EN

Stack Overflow用户
提问于 2014-04-25 22:15:09
回答 2查看 2.6K关注 0票数 6

我正在使用passport-twitter在我的网站上设置twitter连接。用户可以通过单击“登录”或“添加新项目”进行连接。两者之间唯一的区别是,如果他们点击add new item,则在他们登录后会打开一个模式窗口。

为了知道他们点击的按钮,我将url存储在req.session.referrer

代码语言:javascript
复制
// route for twitter authentication and login
app.get('/auth/twitter', function(req, res, next){
    req.session.referrer = req.url;
    console.log(req.session);
    passport.authenticate('twitter')(req, res, next);
});

app.get('/auth/twitter/new', function(req, res, next){
    req.session.referrer = req.url;
    console.log(req.session);
    passport.authenticate('twitter')(req, res, next);
});

// handle the callback after twitter has authenticated the user
app.get('/auth/twitter/callback', function(req, res, next){
    var options = {
            successRedirect : '/twitter-user/signin',
            failureRedirect : '/'
        };

    console.log(req.session);
    if (req.session.referrer && req.session.referrer.indexOf('new') > -1) options.successRedirect = '/twitter-user/new';

    passport.authenticate('twitter', options)(req, res, next)
});

在我的开发环境中一切正常,但是一旦上线,我就会得到这样的错误信息: Express

代码语言:javascript
复制
500 Error: Failed to find request token in session
at Strategy.OAuthStrategy.authenticate (/app/node_modules/passport-twitter/node_modules/passport-oauth1/lib/strategy.js:142:54)
...

我的设置已在Twitter中正确设置。以下是我从日志中得到的:对于请求:

代码语言:javascript
复制
{ cookie: 
  { path: '/',
      _expires: null,
      originalMaxAge: null,
      httpOnly: true },
   passport: {},
   referrer: '/auth/twitter' }

对于回调:

代码语言:javascript
复制
{ cookie: 
    { path: '/',
      _expires: null,
      originalMaxAge: null,
      httpOnly: true },
   passport: {} }

可能是由于子域问题( http://example.com vs http://www.example.com),因为我本地没有pb。我该如何解决这个问题呢?

非常感谢

编辑:我的API key是这样设置的(根据本教程:http://scotch.io/tutorials/javascript/easy-node-authentication-twitter):

代码语言:javascript
复制
passport.use(new TwitterStrategy({

    consumerKey     : configAuth.twitterAuth.consumerKey,
    consumerSecret  : configAuth.twitterAuth.consumerSecret,
    callbackURL     : configAuth.twitterAuth.callbackURL

},function(token, tokenSecret, profile, done) {
    ...
    });
EN

回答 2

Stack Overflow用户

发布于 2014-10-28 14:48:49

我也犯了同样的错误,但还是解决了..这就是我的问题所在和解决方案。

事实上,它不喜欢我的重定向url "http:// localhost /auth/twitter/callback“。我将其更改为"http:// 127.0.0.1 /auth/twitter/callback“。在我的实际代码中,我必须将其保留为localhost,否则会收到有关缺少令牌的错误

票数 2
EN

Stack Overflow用户

发布于 2020-08-08 14:44:41

首先,如果您的回调是localhost,并且您正在使用express-session,请确保cookie secure选项设置为false。e.g

代码语言:javascript
复制
// Express session
let sess = {
    secret: 'secret',
    resave: true,
    saveUninitialized: true,

    cookie: {
        secure: false,
    }
}

您还可以通过以下方式在生产环境中更改此设置

代码语言:javascript
复制
if (process.env.NODE_ENV === 'production') {
    app.set('trust proxy', 1) // trust first proxy
    sess.cookie.secure = true // serve secure cookies
}

如果这不起作用,那么检查您是否已经将cookie sameSite选项设置为Strict。将其更改为Lax。e.g

代码语言:javascript
复制
let sess = {
    secret: 'secret',
    resave: true,
    saveUninitialized: true,

    cookie: {
        secure: false,
        sameSite: 'Lax'
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23295662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档