web-dev-qa-db-ja.com

OAuth :: Unauthorized 401 Authorization Required using OmniAuth-Twitter in Rails 3.2

StackOverFlowにあるいくつかの異なる戦略を実装しましたが、これまでのところ、スローされるエラーに影響を与えるものはないようです。

OAuth::Unauthorized401 Authorization Required

フォローしています Ryan BatesのRC#241 「Twitterでサインイン」をクリックするとエラーが発生します。先に進み、ここにリストされているようにroutes.rbファイルに応答ルートを追加しました。

routes.rb

match 'auth/Twitter/callback', to: 'user#update'

エラーはコールバック関数が原因である可能性があると考えています。同じエラー。私のdev.logを見ると、次のことがわかります。

Started GET "/auth/Twitter" for 127.0.0.1 at 2014-09-16 18:52:08 -0600
(Twitter) Request phase initiated.

OAuth::Unauthorized (401 Authorization Required):
oauth (0.4.7) lib/oauth/consumer.rb:216:in `token_request'
oauth (0.4.7) lib/oauth/consumer.rb:136:in `get_request_token'
omniauth-oauth (1.0.1) lib/omniauth/strategies/oauth.rb:29:in `request_phase'
omniauth-Twitter (1.0.1) lib/omniauth/strategies/Twitter.rb:60:in `request_phase'
omniauth (1.2.2) lib/omniauth/strategy.rb:215:in `request_call'
omniauth (1.2.2) lib/omniauth/strategy.rb:183:in `call!'
omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
omniauth (1.2.2) lib/omniauth/builder.rb:59:in `call'
...
script/Rails:6:in `require'
script/Rails:6:in `<top (required)>'
-e:1:in `load'
-e:1:in `<main>'

だから私は問題がTwitterでの認証にあることを知っています。鍵と秘密でなければなりませんよね?

これで、スタック全体で見つかった提案に従って、KEYとSECRETをENV []変数として、environment/development.rbファイルへの直接文字列として、「ENV []」変数などを取り出しました。

私のKEYとSECRETは、説明したようにカスタム構成になりました ここ...

config/initializers/social_media.rb:

Twitter_CONFIG = YAML.load_file("#{::Rails.root}/config/Twitter.yml")[::Rails.env]

config/initializers/omniauth.rbファイル:

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :Twitter, Twitter_CONFIG['app_id'], Twitter_CONFIG['secret']
end   

ActionController: Exception caught OAuth::Unauthorized - 401 Authorization Requiredに関するアイデアはありますか?これはおそらくNoobエラーですが、私のGoogle-Fuは現在Google-Fされています...

16
Matteo

髪を引き裂いた夜の後、 Twitter開発者コンソール のコールバックURLを調べました。

手間を省き、これを設定することを忘れないでください。 RailsCastには直接記載されていませんが、Ryanは簡単に説明します。

コールバックURLを設定するときは、//localhost:3000を入力しないでください。機能しません。代わりに以下を使用してください:

http://127.0.0.1:3000/
56
Matteo