使用 superfaceai / passport-twitter-oauth2 时无法验证授权请求状态

Getting Unable to verify authorization request state while using superfaceai / passport-twitter-oauth2

提问人:Arun Lazer 提问时间:11/8/2023 最后编辑:Arun Lazer 更新时间:11/9/2023 访问量:34

问:

我只是按照 superfaceai / passport-twitter-oauth2
分享的例子 https://github.com/superfaceai/passport-twitter-oauth2/blob/main/examples/basic-usage/server.js

当我实现 OAuth 2.0 身份验证的代码时,我遇到了一个持续存在的问题。每当我尝试登录或授权我的应用程序时,它都会始终将我重定向到指定的“failureRedirect”URL。在此重定向的同时,还显示一条错误消息,内容为:“无法验证授权请求状态。有关错误消息,请参阅随附的图片

const passport = require('passport');
const { Strategy } = require('@superfaceai/passport-twitter-oauth2');
const session = require('express-session');

const TWITTER_CLIENT_ID = "xxxxxxxxxxxxxxxxx"
const TWITTER_CLIENT_SECRET = "xxxxxxxxxxxxxxxxx"

passport.serializeUser(function (user, done) {
  done(null, user);
});
passport.deserializeUser(function (obj, done) {
  done(null, obj);
});

// Use the Twitter OAuth2 strategy within Passport
passport.use(
  new Strategy(
    {
      clientID: TWITTER_CLIENT_ID,
      clientSecret: TWITTER_CLIENT_SECRET,
      clientType: 'confidential',
      callbackURL: `http://127.0.0.1:6002/social/twitter/callback`,
    },
    (accessToken, refreshToken, profile, done) => {
      console.log('Success!', { accessToken, refreshToken });
      return done(null, profile);
    }
  )
);

const app = express();

app.use(passport.initialize());
app.use(
  session({ secret: 'keyboard cat', resave: false, saveUninitialized: true })
);

app.get(
  '/social/twitter',
  passport.authenticate('twitter', {
    scope: ['tweet.read', 'users.read', 'offline.access'],
  })
);

app.get(
  '/login',
  function (req, res) {
    const sessionData = JSON.stringify(req.session, undefined, 2);
    res.end(
      `<h1>Authentication Failed</h1> User data: <pre>${sessionData}</pre>`
    );
  }
);

app.get(
  '/social/twitter/callback',
  passport.authenticate('twitter',
  {failureRedirect:'/login',
  failureMessage:true
}
  ),
  function (req, res) {
    const userData = JSON.stringify(req.user, undefined, 2);
    res.end(
      `<h1>Authentication succeeded</h1> User data: <pre>${userData}</pre>`
    );
  }
);

app.listen(6002, () => {
  console.log(`Listening on http://127.0.0.1:6002`);
});


[![enter image description here][1]][1]
 


  *[1]: https://i.stack.imgur.com/rTZut.png*
node.js express passport.js twitter-oauth

评论


答:

0赞 Arun Lazer 11/9/2023 #1

我发现的问题是,我在 superfaceai/passport-twitter-oauth2 上使用了 auth1.0 客户端可信度。另外,我尝试了这个,它就像一个魅力 https://github.com/superfaceai/twitter-demo/

评论

0赞 Tyler2P 11/9/2023
虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接的页面发生更改,仅链接的答案可能会失效。
0赞 Arun Lazer 11/14/2023
当然@Tyler2P会将其添加为答案
0赞 Chou Chris 12/20/2023 #2

我遇到了同样的问题,最后发现原因是请求twitter令牌接口不工作。原因是我挂断了VPN,但是VPN不是全局的,所以NodeJS无法访问twitter界面,就出现了这个问题。最后,我连接了全球VPN,完美通过。这是我的情况。我希望它有所帮助