2014-01-16 5 views
35

Ich versuche, mit OAuth auf NodeJS zu authentifizieren und ich bekomme diese Fehlermeldung:Desktop-Anwendungen unterstützen nur die oauth_callback Wert 'oob'/oauth/request_token

Error getting OAuth request token : { statusCode: 401, data: '\n\n Desktop applications only support the oauth_callback value \'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); 

Vielen Dank im Voraus.

+2

Vielen Dank, sehr geschätzt, konnten wir oauthAccessToken und oauthAccessTokenSecret mit diesem scrypt abrufen, und das ist, was wir im Internet suchten, hier fanden wir es: D – Andromeda

+0

schön, das ist der Geist :-) Froh dass – felipekm

Antwort

110

Füllen Sie das "Callback-URL" Feld in Ihrem Twitter-Einstellungen dev Konto.

+1

KISS zu lesen - ich habe es mit Ihrer Hilfe haben und diese lib: https://github.com/jaredhanson/passport-twitter – felipekm

+0

Wie 'nodejs' auf Browser laufen zu lassen? müssen grundlegende Hilfe – diEcho

+0

Start auf nodejs.org – felipekm

21

Zusätzlich zu dem, was die anderen Antwort sagt ...

hielt ich erhalte eine Fehlermeldung, wenn die Callback-URL in der Twitter-Entwickler-Konsole zu füllen versuchen. Ich habe versucht, http://localhost:4000 einzugeben, aber es gab mir Fehler. Wenn Sie benötigen müssen localhost verwenden, können Sie http://127.0.0.1:4000 verwenden stattdessen und Twitter akzeptiert, dass.

(Vielleicht einige offensichtlich, aber dauerte eine Weile, um es herauszufinden.)

+0

Das ist genau das Gegenteil dessen, was Facebook braucht. Dort können Sie nicht "http: //127.0.0.1: 4000" eingeben, sondern "http: // localhost: 4000" –

0

Dies ist eine alte Frage, aber ich lief in diesen Fehler heute, und das, was mir auffiel ist, dass neue Twitter-Anwendungen kann ohne eine Rückruf-URL gespeichert werden, aber sobald Sie Ihre App mit einer Rückruf-URL speichern, Twitter Sie werden es nicht zulassen, speichern - um es in die letzte URL zufällt Sie hatten. In unserem Fall war das egal, da unser OAuth-Flow die Callback-URL liefert, aber etwas auf der Seite von Twitter erfordert eine Callback-URL (ANY-Callback-URL). In unserem Fall tauchte dieser Fehler nur in Entwicklungsumgebungen auf, denen eine neue (und nicht verwendete) Twitter-Anwendung zugeordnet war.

Verwandte Themen