[英]Twitter Oauth Strategy with Warden + Devise Authentication Gems for Ruby
[英]Keep getting OAuth::Unauthorized error when using oauth and twitter ruby gems
我正在使用ruby twitter gem和oauth來訪問用戶的Twitter帳戶。 在我的代碼中,我有:
unless @user.twitter_authd?
oauth = Twitter::OAuth.new('token', 'secret')
session[:twitter_request_token] = oauth.request_token.token
session[:twitter_request_secret] = oauth.request_token.secret
@twitter_auth_url = oauth.request_token.authorize_url
end
其中令牌和秘密已插入我的實際令牌和秘密。 當我點擊@twitter_auth_url的鏈接時,我被帶到twitter並要求授予訪問權限。 我點擊允許,然后twitter將我重定向到我的回調網址http://www.mydomain.com/twitter_callback/?oauth_token=fmy2aMvnjVgaFrz37bJ4JuB8r5xN79gsgDQRG4BNY然后點擊此代碼:
oauth = Twitter::OAuth.new('token', 'secret')
logger.info("session[:twitter_request_token] = #{session[:twitter_request_token]}")
logger.info("session[:twitter_request_secret] = #{session[:twitter_request_secret]}")
oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
session[:twitter_request_token] = nil
session[:twitter_request_secret] = nil
@user.update_attributes({
:twitter_token => oauth.access_token.token,
:twitter_secret => oauth.access_token.secret,
})
redirect_to root_path
Twitter請求令牌和秘密設置得很好。 但是我最終得到了授權錯誤:
OAuth::Unauthorized in MainController#twitter_callback
401 Unauthorized
RAILS_ROOT: /Users/TAmoyal/Desktop/RoR_Projects/mls
Application Trace | Framework Trace | Full Trace
/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/consumer.rb:167:in `token_request'
/Library/Ruby/Gems/1.8/gems/oauth-0.3.4/lib/oauth/tokens/request_token.rb:14:in `get_access_token'
/Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in `authorize_from_request'
/Users/TAmoyal/Desktop/RoR_Projects/mls/app/controllers/main_controller.rb:70:in `twitter_callback'
代碼在此行失敗:
oauth.authorize_from_request(session[:twitter_request_token], session[:twitter_request_secret])
當它試圖獲得訪問令牌時。 您可以在此處查看authorize_from_request的源代碼。 我不確定為什么會這樣。 有人有想法嗎?
派對有點晚,但我自己遇到了同樣的問題。 我將問題跟蹤到Twitter中我的OAuth應用程序的設置。 我最初沒有指定回調URL,因為我不確定它。
一旦我設置了我的rails應用程序,我就回去發現Twitter假設我是桌面應用程序,因為我沒有指定回調URL。 一旦我將其更改為網站並輸入回調網址,我就停止了400秒。
如果您收到錯誤401 - OAuth :: Unauthorized,請確保按如下方式編輯Twitter應用程序的設置:
這是關於系統與twitter服務器的時間同步問題。
Twitter不允許localhost
作為有效回調URL的一部分。
而是使用http://127.0.0.1:3000/auth/twitter/callback
希望這可以幫助
這是我遇到的最煩人的調試之一。 我偶然輸出幾個地方,因為URL是動態的,它們碰巧沒有在我的測試用例中定義(我使用它來顯示圖表數據,現在還不夠,所以google chart api URL是空白的)。 這導致我的瀏覽器在加載某些頁面時向我的localhost發出多個請求。 某種程度上,這使得oauth過程失敗了。 顯然,SO上的人無法知道我的應用程序特定問題,所以我不得不回答我自己的問題。
我有同樣的問題,這個帖子中沒有任何建議對我有效。
我發現我的問題是我的請求中的TIMESTAMP。 我運行腳本的移動設備有一個升級的時鍾。 當我將設備上的系統時間更新到正確的時間(即現在)時,我的所有請求都返回“200 OK”而不是“401 Unauthorized”。
這個問題似乎是由於twitter無法正確處理connection keep-alive
而引起的。 確保在twitter的請求中設置connection=close http header
。 浪費了周末調試這個。
沒有足夠的信息給我,但是什么時候Twitter寶石最后更新? twitter在大約中期改變了他們的oauth'東西'。 也許你有一個舊的。 我會更新你的問題以顯示callback_url,並確保你有正確的令牌和秘密,它看起來你沒有。
另外,你是否在Twitter應用頁面中放置了正確的回調網址? 很多時候也搞砸了你。
如果失敗則使用mbleighs twitter_auth代替。 它適合我,非常漂亮。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.