簡體   English   中英

使用oauth和twitter ruby​​ gems時,請繼續獲取OAuth :: Unauthorized錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM