2015-10-01 26 views
0

我有一個問題,我正在嘗試調試,我將不勝感激一些幫助。如何正確發送oauth 1.0請求以驗證憑據與nodejs

curl命令中的oauthToken變量和oauth_token以及使用者密鑰是相同的。

這curl命令作品:

curl --get 'https://api.twitter.com/1.1/account/verify_crn: OAuth oauth_consumer_key="dv5trHvHDrAjIM87Z3KGtJrq5", oauth_nonce="7aec4b5b37ab420d44717387e2f889be", oauth_signature="qm4i0jGOPbbmYkaOFCoJhOfgcd4%3D", oauth_signature_method="HMAC-SHA1", oauth_timestamp="1443690396", oauth_token="71611055-pzDi5UJQXKzdP4kBLceLLwuzel8DKiRjNivlmkCuA", oauth_version="1.0"' --verbose 

以下兩個不和他們理應相同PARAMS。他們返回

401 - { 「錯誤」:[{ 「代碼」:32, 「消息」: 「無法驗證您的身份。」}

第一次嘗試是https://www.npmjs.com/package/request#oauth-signing

 const oauth={ 
     consumer_key:config.get('twitter.consumerKey'), 
     token:oauthToken, 
     } 
     console.log(oauth); 

     requestAsync({ 
     url:'https://api.twitter.com/1.1/account/verify_credentials.json', 
     method:'GET', 
     oauth, 
     }) 

第二個嘗試是https://github.com/ciaranj/node-oauth

const oauthToken=req.body.accessToken.split(':')[0]; 
    const oauthTokenSecret=req.body.accessToken.split(':')[1]; 
    console.log(oauthToken+" " + oauthTokenSecret); 
    const oauth = new OAuth.OAuth(
    'https://api.twitter.com/oauth/request_token', 
    'https://api.twitter.com/oauth/access_token', 
    config.get('twitter.consumerKey'), 
    config.get('twitter.consumerSecret'), 
    '1.0A', 
    null, 
    'HMAC-SHA1' 
); 

    oauth.get(
    'https://api.twitter.com/1.1/account/verify_credentials.json', 
    oauthToken, 
    oauthTokenSecret, 
    function (e, data, res){ 
    if (e) console.error(e); 
    console.log(require('util').inspect(data)); 
    }); 

回答

2

正如提到有4個,你必須提供所需的OAuth參數:

request({ 
    oauth: { 
    consumer_key: '...', 
    consumer_secret: '...', 
    token: '...', 
    token_secret: '...' 
    } 
}) 

你可以得到consumer_keyconsumer_secret從您的OAuth應用程序的設置頁面。用戶的tokentoken_secret可以通過執行OAuth流程獲取。

您可以使用Grant來獲取用戶的憑據。您可以查看Twitter的OAuth流程如何看起來像here

+0

你不需要驗證憑證的祕密https://dev.twitter.com/rest/reference/get/account/verify_credentials有一個演示,你可以從官方twitter獲得curl命令頁面並在我的命令提示符下工作。 同樣在第二個例子中,我爲消費者和用戶使用了祕密。 – arisalexis

+0

你甚至試過我的解決方案嗎?我知道答案,因爲它適用於我的目的。祕密用於計算簽名。另外,我強烈建議您使用請求而不是node-oauth。 – simo

+0

我會接受你的回答,我沒有意識到祕密是用來計算簽名,但不存在於curl命令中,並且謝謝你。第二個例子不起作用,因爲twitter擷取的access_token具有表單令牌:secret @ consumer_key,並且我沒有去除@ – arisalexis

相關問題