【问题标题】:Desktop applications only support the oauth_callback value 'oob'/oauth/request_token桌面应用仅支持 oauth_callback 值 'oob'/oauth/request_token
【发布时间】:2014-02-05 21:01:56
【问题描述】:

我正在尝试在 NodeJS 上使用 OAuth 进行身份验证,但出现此错误:

获取 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);

提前致谢。

【问题讨论】:

  • 非常感谢,非常感谢,我们可以用这个脚本检索 oauthAccessToken 和 oauthAccessTokenSecret,这就是我们在互联网上搜索的内容,在这里我们找到了:D
  • 很好,这就是精神 :-) 很高兴看到这篇文章

标签: javascript node.js twitter oauth express


【解决方案1】:

填写您的 Twitter 设置开发帐户中的“回调 URL”字段。

【讨论】:

【解决方案2】:

除了其他答案所说的......

尝试在 Twitter 开发控制台中填写回调 URL 时,我不断收到错误消息。我试图输入http://localhost:4000,但它给了我错误。如果需要使用localhost,可以使用http://127.0.0.1:4000,Twitter 接受。

(对某些人来说可能很明显,但我花了一点时间才弄明白。)

【讨论】:

  • 这与 Facebook 的需求完全相反。在那里,你不能输入http://127.0.0.1:4000,但需要http://localhost:4000
  • 现在可以在 Twitter 开发控制台中输入 http://localhost:4000 作为回调 URL。
【解决方案3】:

这是一个老问题,但我今天遇到了这个错误,我注意到新的 Twitter 应用程序可以在没有回调 URL 的情况下保存,但是一旦你使用回调 URL 保存你的应用程序,Twitter 不会让你保存它——它会恢复到你上次拥有的 URL。在我们的例子中,这无关紧要,因为我们的 OAuth 流程提供了回调 URL,但 Twitter 方面的某些事情需要有回调 URL(任何回调 URL)。所以在我们的例子中,这个错误只会出现在有一个新的(和未使用的)Twitter 应用程序与之关联的开发环境中。

【讨论】:

【解决方案4】:

今天才发现,希望对大家有帮助。

如果您尝试通过 Firebase 验证 Twitter API 身份验证。

您必须添加回调 URL(必填字段) 在Twitter API Developer Portal 的身份验证部分。

您可以在 Twitter 的身份验证部分(登录方法)身份验证提供程序中找到来自 Firebase Console 的回调 URL。

确保回调 URL 完全相同。

如果没有,它会给你一个类似这样的错误:

com.firebase.ui.auth.FirebaseUiException: There was an internal error in the web widget. [ {"code":"auth/invalid-credential","message":"Error getting request token: 403 <?xml version='1.0' encoding='UTF-8'?><errors><error code=\"415\">Callback URL not approved for this client application. Approved callback URLs can be adjusted in your application settings</error></errors>.

【讨论】:

    猜你喜欢
    • 2017-07-23
    • 2013-03-28
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2011-02-13
    • 2011-04-14
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多