2016-03-15 88 views
1

我成功從home_timeline.json檢索結果,但使用相同的oauth邏輯/users/show.json失敗(用戶/查找)。Twitter OAuth 1.1 show.json失敗,而home_timeline.json成功

{"errors":[{"code":32,"message":"Could not authenticate you."}]} 

我將user_id添加到請求中,同時使用基礎url進行簽名。

請注意,home_timeline.json需要用戶上下文,而其他端點不需要用戶上下文,但不確定它是否相關。

應用程序是mobilegapgap(angular),並使用$ cordovaOauth.twitter註冊用戶並檢索oauth令牌。 我已經測試過使用郵差,同樣的事情發生。 OAuth對於home_timeline.json有效,但當嘗試使用相同的邏輯併爲users/show.json生成新的OAuth時,請求會因未經身份驗證而失敗。

下面是生成特徵碼

function createTwitterSignature(method, url) { 
    var oauthObject = { 
     oauth_consumer_key: clientId, 
     oauth_nonce: $cordovaOauthUtility.createNonce(10), 
     oauth_signature_method: "HMAC-SHA1", 
     oauth_token: token.oauth_token, 
     oauth_timestamp: Math.round((new Date()).getTime()/1000.0), 
     oauth_version: "1.0" 
    }; 
    var signatureObj = $cordovaOauthUtility.createSignature(method, url,oauthObject, {},clientSecret, token.oauth_token_secret); 
    $http.defaults.headers.common.Authorization = signatureObj.authorization_header; 
} 

var url ='https://api.twitter.com/1.1/statuses/home_timeline.json'; 
//var url = 'https://api.twitter.com/1.1/users/show.json'; 
//var user_id = token.user_id; 
createTwitterSignature('GET', url); 
//return $resource(url+'?user_id='+user_id).query(); 
return $resource(url).query(); 

任何人有想法我究竟做錯了什麼?

回答

0

查詢參數必須包含在OAuth簽名中。此外,類型爲application/x-www-form-urlencoded的POST請求應在簽名中包含身體的參數。

查看https://dev.twitter.com/oauth/overview/creating-signatures瞭解更多信息

+0

謝謝Yuri! 將params添加到簽名解決了問題。 因爲它是GET請求,所以在調用服務時,我剛剛在URL中添加了params,但我會記住您對POST的建議。 再次...謝謝! – Devalzo