web-dev-qa-db-ja.com

oauthおよびTwitter Ruby gemsを使用する場合、OAuth :: Unauthorizedエラーを取得し続ける

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がコールバックURLにリダイレクトします 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 here のソースコードを見ることができます。なぜこれが起こっているのか分かりません。誰もがアイデアを持っていますか?

40
Tony

これは、私が遭遇した中でデバッグするのが最も面倒なことの1つでした。 URLは動的であり、テストケースで定義されていないため、偶然に2つの場所で出力していました(これを使用してチャートデータを表示しますが、現時点では十分ではないため、GoogleチャートのAPI URLは空白です)。これにより、一部のページがロードされたときに、ブラウザーがローカルホストに複数の要求を行うようになりました。どういうわけかoauthプロセスが無駄になりました。明らかに、S.O。の人々が私のアプリケーション固有の問題を知る方法がないので、自分の質問に答えなければなりませんでした。

4
Tony

パーティーに少し遅れましたが、自分で同じ問題にぶつかりました。私はTwitterでOAuthアプリの設定まで問題を追跡しました。最初はコールバックURLを指定していませんでした。

Railsアプリをセットアップしたら、コールバックURLを指定していなかったため、Twitterがデスクトップアプリケーションであると想定していました。これをWebサイトに変更し、コールバックURLを入力しました私は400の取得を停止しました。

78
George Palmer

エラー401-OAuth :: Unauthorizedが発生する場合は、Twitterアプリケーションの設定を次のように編集してください。

28
Hatem Mahmoud

これは、システムとTwitterサーバーの時刻同期に関する問題です。

8
Rabia

Twitterでは、有効なコールバックURLの一部としてlocalhostを許可していません。

代わりにhttp://127.0.0.1:3000/auth/Twitter/callbackを使用してください

お役に立てれば

7
user633183

私はこれと同じ問題を抱えていましたが、このスレッドの提案はどれもうまくいきませんでした。

私の問題は、リクエストのタイムスタンプであることがわかりました。スクリプトを実行していたモバイルデバイスには、ジャッキアップクロックがありました。デバイスのシステム時刻を正しい時刻(つまり現在)に更新すると、すべてのリクエストが「401 Unauthorized」ではなく「200 OK」で返されました。

2
Kenny Wyland

この問題は、Twitterがconnection keep-aliveを正しく処理できないために発生したようです。 Twitterへのリクエストでconnection=close http headerを必ず設定してください。これをデバッグする週末を無駄にしました。

1
vadim

私にとって十分な情報ではありませんが、Twitter gemが最後に更新されたのはいつですか? Twitterはoauth 'stuff'を約半ばに変更した可能性があります。おそらく古いものがあります。callback_urlを表示するように質問を更新し、正しいトークンとシークレットを確認します持っていないようです。

また、Twitterアプリページに正しいコールバックURLを挿入しましたか?何度もあなたを台無しにします。

それが失敗した場合は、代わりにmbleighs Twitter_auth を使用してください。それは私のために働いて、かなり滑らかです。

0
pjammer