2014-01-16 52 views
35

我試圖在用的NodeJS OAuth的認證,我收到此錯誤:桌面應用程序只支持oauth_callback值「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' }

這裏是我的代碼(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); 

在此先感謝。

+2

非常感謝你,非常感謝,我們可以檢索oauthAccessToken和oauthAccessTokenSecret與這個scritpt,這就是我們正在尋找所有的互聯網,在這裏我們發現它:D – Andromeda

+0

好,這就是精神:-)格拉德閱讀 – felipekm

回答

110

填寫您的Twitter設置開發賬戶中的「回調URL」字段。

+1

親吻 - 我做了你的幫助和這個lib:https://github.com/jaredhanson/passport-twitter – felipekm

+0

如何在瀏覽器上運行'nodejs'?需要基本幫助 – diEcho

+0

在nodejs.org上啓動 – felipekm

21

除了對方的回答說什麼......

我一直試圖填補回調URL中的Twitter開發者控制檯時,得到一個錯誤。我試圖輸入http://localhost:4000,但它給了我錯誤。如果您需要使用localhost,則可以使用http://127.0.0.1:4000代替,並且Twitter接受該代碼。

(可能明顯一些,但我花了一些時間來弄明白。)

+0

這與Facebook所需要的完全相反。在那裏,你不能輸入'http://127.0.0.1:4000',但需要'http:// localhost:4000' –

0

這是一個老問題,但我今天遇到了這個錯誤,我注意到的一點是,新的Twitter應用可以在沒有回叫網址的情況下保存,但只要您使用回叫網址保存您的應用,Twitter不會讓您保存它 - 它會恢復到您擁有的最後一個網址。在我們的例子中,這並不重要,因爲我們的OAuth流程提供了回調URL,但是Twitter的東西需要有一個回調URL(任意回調URL)。所以在我們的例子中,只有在有新的(和未使用的)Twitter應用程序關聯的開發環境中才會出現此錯誤。