桌面应用程序仅支持oauth_callback值“oob”/ oauth / request_token

我正在尝试使用NodeJS上的OAuth进行身份validation,并且出现此错误:

获取OAuth请求令牌时出错:{statusCode:401,data:'\ n \ n桌面应用程序仅支持oauth_callback值'oob \'\ n / oauth / request_token \ n \ n'}

这是我的代码(server.js)

var express = require('express'); var util = require('util'); var oauth = require('oauth'); var app = express.createServer(); // Get your credentials here: https://dev.twitter.com/apps var _twitterConsumerKey = "1"; var _twitterConsumerSecret = "2"; var consumer = new oauth.OAuth( "https://twitter.com/oauth/request_token", "https://twitter.com/oauth/access_token", _twitterConsumerKey, _twitterConsumerSecret, "1.0A", "http://127.0.0.1:8080/sessions/callback", "HMAC-SHA1"); app.configure('development', function(){ app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); app.use(express.logger()); app.use(express.cookieParser()); app.use(express.session({ secret: "very secret" })); app.use(function(req, res, next) { res.locals.user = req.session.user; next(); }); }); app.get('/sessions/connect', function(req, res){ consumer.getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret, results){ if (error) { res.send("Error getting OAuth request token : " + util.inspect(error), 500); } else { req.session.oauthRequestToken = oauthToken; req.session.oauthRequestTokenSecret = oauthTokenSecret; res.redirect("https://twitter.com/oauth/authorize?oauth_token="+req.session.oauthRequestToken); } }); }); app.get('/sessions/callback', function(req, res){ util.puts(">>"+req.session.oauthRequestToken); util.puts(">>"+req.session.oauthRequestTokenSecret); util.puts(">>"+req.query.oauth_verifier); consumer.getOAuthAccessToken(req.session.oauthRequestToken, req.session.oauthRequestTokenSecret, req.query.oauth_verifier, function(error, oauthAccessToken, oauthAccessTokenSecret, results) { if (error) { res.send("Error getting OAuth access token : " + util.inspect(error) + "["+oauthAccessToken+"]"+ "["+oauthAccessTokenSecret+"]"+ "["+util.inspect(results)+"]", 500); } else { req.session.oauthAccessToken = oauthAccessToken; req.session.oauthAccessTokenSecret = oauthAccessTokenSecret; res.redirect('/home'); } }); }); app.get('/home', function(req, res){ consumer.get("http://twitter.com/account/verify_credentials.json", req.session.oauthAccessToken, req.session.oauthAccessTokenSecret, function (error, data, response) { if (error) { res.redirect('/sessions/connect'); // res.send("Error getting twitter screen name : " + util.inspect(error), 500); } else { var parsedData = JSON.parse(data); // req.session.twitterScreenName = response.screen_name; res.send('You are signed in: ' + parsedData.screen_name); } }); }); app.get('*', function(req, res){ res.redirect('/home'); }); app.listen(8080); 

提前致谢。

填写你的Twitter设置开发账户中的“callbackURL”字段。

除了另一个答案说…

尝试填写Twitter开发者控制台中的回叫URL时,我一直收到错误。 我试图进入http://localhost:4000 ,但它给我错误。 如果你需要使用localhost ,你可以使用http://127.0.0.1:4000 ,而Twitter接受这个。

(也许对一些人来说是显而易见的,但花了我一点时间才弄清楚。)

这是一个古老的问题,但我今天遇到了这个错误,我注意到的是,新的Twitter应用程序可以保存没有callback的URL,但只要你用一个callbackURL保存你的应用程序, Twitter不会让你保存它 – 它会恢复到你的最后一个URL。 在我们的例子中,这并不重要,因为我们的OAuthstream程提供了callbackURL,但是Twitter的一些东西需要有一个callbackURL(ANYcallbackURL)。 所以在我们的例子中,这个错误只在具有新的(和未使用的)Twitter应用程序的开发环境中才会出现。