it-swarm-tr.com

Masaüstü uygulamaları yalnızca oauth_callback değerini 'oob'/oauth/request_token destekliyor

NodeJS'de OAuth ile kimlik doğrulaması yapmaya çalışıyorum ve bu hatayı alıyorum: 

OAuth isteği belirteci alınırken hata oluştu: {statusCode: 401, data: '\ n\n Masaüstü uygulamaları yalnızca oauth_callback değerini \' oob\'\ n/oauth/request_token\n\n'} destekler

İşte kodum (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);

Şimdiden teşekkürler.

42
felipekm

Twitter ayarlarınızda hesabınızdaki "Geri arama URL'si" alanını doldurun.

124
user3248653

Diğer cevabın söylediklerine ek olarak ... 

Twitter dev konsolundaki Geri Arama URL'sini doldurmaya çalışırken hata almaya devam ettim. http://localhost:4000 girmeye çalışıyordum, ama bana hata veriyordu. localhost kullanmanız gerekirse, bunun yerine http://127.0.0.1:4000 kullanabilirsiniz ve Twitter bunu kabul eder.

(Belki bazıları için açıktır, ancak çözmem biraz zaman aldı.)

21
matthewpalmer

Bu eski bir sorudur, ancak bugün bu hatayı karşıladım ve fark ettiğim şey, YENİ Twitter uygulamalarının bir geri arama URL’si OLMADIĞINI kaydedebileceği, ancak uygulamanızı bir geri arama URL’si ile kaydettiğiniz anda, Twitter kazandı ' kaydetmenize izin vermeyin - sahip olduğunuz son URL’ye geri dönecektir. Bizim durumumuzda, OAuth akışımızın geri arama URL'sini sağlaması önemli değildi, ancak Twitter'ın tarafındaki bir şey, bir geri arama URL'si (HERHANGİ bir geri arama URL'si) olmasını GEREKTİRİR. Dolayısıyla bizim durumumuzda, bu hata yalnızca kendileriyle ilişkilendirilmiş yeni (ve kullanılmayan) bir Twitter uygulaması olan geliştirme ortamlarında düzeltildi.

1
Everett