40


21

私はユーザーのTwitterアカウントにアクセスするためにRubyのTwitterのgemとoauthを使っています。 私のコードでは、私は持っています:

@ 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.author

tokenとsecretには実際のtokenとsecretが挿入されています。 @twitter_auth_urlへのリンクをクリックすると、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リクエストトークンとシークレットはうまく設定されています。 しかし、私は認証エラーになります:

MainControllerでのOAuth :: Unauthorized#twitter_callback

401未承認

RAILS_ROOT:/ユーザー/ TAmoyal /デスクトップ/ RoR_Projects / mlsフレームワークトレースフルトレース

/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: `get_access_token '/Library/Ruby/Gems/1.8/gems/erwaller-twitter-0.6.13.1/lib/twitter/oauth.rb:29:in` authize_from_request' / Users /にありますTAmoyal / Desktop / RoR_Projects / mls / app / controllers / main_controller.rb:70: `twitter_callback 'に

この行でコードが失敗しています。

oauth.authorize_from_request(session [:twitter_request_token]、session [:twitter_request_secret])

アクセストークンを取得しようとしたとき。 あなたはauthorize_from_requestのソースコードを見ることができます ここ。 私はなぜこれが起こっているのかわからない。 誰かアイデアがありますか?

8 Answer


78


パーティーには少し遅れましたが、私自身も同じ問題に遭遇しました。 私はTwitterで私のOAuthアプリのセットアップまで問題を突き止めました。 わからないので、最初はコールバックURLを指定していませんでした。

私が自分のrailsアプリを設定した後、私はコールバックURLを指定していなかったのでTwitterが自分がデスクトップアプリケーションであると仮定していたのを見つけた。 これをWebサイトに変更してコールバックURLを入力すると、400秒の取得が停止しました。


28


エラー401 - OAuth

Unauthorizedが表示された場合は、Twitterアプリケーションの設定を次のように編集してください。

  • アプリケーションの種類:ブラウザ

  • コールバックURL:http://127.0.0.1:3000/auth/twitter/callback


8


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


7


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

代わりに `http://127.0.0.1:3000 / auth / twitter / callback`を使ってください。

お役に立てれば


4


これは私が遭遇したことをデバッグするための最も厄介なことの1つでした。 URLは動的で、私のテストケースでは定義されていなかったため偶然に2か所で出力していました(グラフデータを表示するためにこれを使用しています。 これは私のブラウザがいくつかのページがロードされたとき私のローカルホストに複数の要求をする原因となりました。 どういうわけか、それはオーサスプロセスをがらくたにしました。 明らかにS.O.の人々のための方法はありません。 自分のアプリケーション固有の問題について知るために、私は自分の質問に答えなければなりませんでした。


2


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

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


1


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


0


私にとって十分な情報ではありませんが、twitter gemが最後に更新されたのはいつですか? twitterは彼らのOAuthを変更しました。 おそらくあなたは古いものを持っています。 callback_urlを表示するように質問を更新し、正しいトークンと秘密を持っていることを確認します。

また、Twitterのアプリページに正しいコールバックURLを追加しましたか。 あなたを台無しにすることがたくさんあります。

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