webentwicklung-frage-antwort-db.com.de

Desktop-Anwendungen unterstützen nur den oauth_callback-Wert 'oob'/oauth/request_token

Ich versuche mich bei NodeJS mit OAuth zu authentifizieren und erhalte folgende Fehlermeldung: 

Fehler beim Abrufen des OAuth-Anforderungstokens: {statusCode: 401, Daten: '\ n\n Desktop-Anwendungen unterstützen nur den oauth_callback-Wert \' oob\'\ n/oauth/request_token\n\n'}

Hier ist mein Code (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);

Danke im Voraus.

42
felipekm

Füllen Sie das Feld "Rückruf-URL" in Ihrem Konto für Twitter-Einstellungen aus.

124
user3248653

Neben dem, was die andere Antwort sagt ... 

Beim Versuch, die Callback-URL in der Twitter-Dev-Konsole aufzufüllen, wurde eine Fehlermeldung angezeigt. Ich habe versucht, http://localhost:4000 einzugeben, aber es gab mir Fehler. Wenn Sie localhost verwenden müssen, können Sie stattdessen http://127.0.0.1:4000 verwenden, und Twitter akzeptiert dies.

(Vielleicht für manche offensichtlich, aber ich habe etwas gebraucht, um es herauszufinden.)

21
matthewpalmer

Dies ist eine alte Frage, aber ich bin heute auf diesen Fehler gestoßen, und ich habe festgestellt, dass NEUE Twitter-Anwendungen OHNE Rückruf-URL gespeichert werden können. Sobald Sie jedoch Ihre App mit einer Rückruf-URL speichern, hat Twitter gewonnen. Lassen Sie es speichern - es wird auf die letzte URL zurückgesetzt, die Sie zuvor hatten. In unserem Fall spielte es keine Rolle, da unser OAuth-Fluss die Rückruf-URL bereitstellt, etwas auf Twitter-Seite ERFORDERT jedoch, dass eine Rückruf-URL (eine beliebige Rückruf-URL) vorhanden ist. In unserem Fall trat dieser Fehler nur in dev-Umgebungen auf, denen eine neue (und nicht verwendete) Twitter-Anwendung zugeordnet war.

1
Everett