41

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 のソース コードはこちらで確認できます。なぜこれが起こっているのかわかりません。誰にもアイデアがありますか?

4

8 に答える 8

78

パーティーに少し遅れましたが、同じ問題に遭遇しました。Twitter での OAuth アプリのセットアップまで問題を追跡しました。よくわからなかったので、最初はコールバック URL を指定していませんでした。

Rails アプリをセットアップしたら、コールバック URL を指定していなかったため、Twitter は私がデスクトップ アプリケーションであると想定していることに気付きました。これをウェブサイトに変更してコールバック URL を入力すると、400 秒が表示されなくなりました。

于 2010-01-03T10:37:07.417 に答える
8

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

于 2010-10-05T10:54:55.163 に答える
7

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

代わりに使用http://127.0.0.1:3000/auth/twitter/callback

お役に立てれば

于 2011-03-08T21:47:51.977 に答える
4

これは、私が遭遇したデバッグで最も厄介なことの1つでした。URLが動的であり、テストケースで定義されていないため、誤っていくつかの場所で出力していました(これを使用してグラフデータを表示していますが、現在十分ではないため、google chart api URLは空白です)。これにより、一部のページが読み込まれたときに、ブラウザがローカルホストに対して複数のリクエストを行うようになりました。どういうわけか、それはoauthプロセスをがらくたにしました。明らかに、SOの人々が私のアプリケーション固有の問題について知る方法がないので、私は自分の質問に答えなければなりませんでした。

于 2009-08-18T00:35:53.667 に答える
2

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

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

于 2012-01-16T23:53:41.577 に答える
1

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

于 2011-03-21T19:26:49.647 に答える
0

私には十分な情報ではありませんが、twitter gem が最後に更新されたのはいつですか? Twitterは5月中旬にoauthの「もの」を変更しました。おそらくあなたは古いものを持っています。質問を更新して callback_url を表示し、適切なトークンとシークレットを持っていることを確認しますが、それはないようです。

また、Twitter アプリのページに正しいコールバック URL を入れましたか? 多くの場合、あなたも台無しになります。

それが失敗した場合は、代わりに mbleighs twitter_authを使用してください。それは私にとってはうまくいき、かなり滑らかです。

于 2009-08-15T01:32:06.550 に答える