2

アプリで omniauth-facebook を使用しています。開発ではすべてがうまく機能します。herokuにアップロードしたら(別のFacebookアプリを作成したので、本番環境でのURLの変更を補います)。mysitename.heroku.com/auth/facebook を使用して Facebook サインイン ページにアクセスできます。しかし、ログインして同意/許可ボタンをクリックすると、エラーが発生し、OmniAuth.config.on_failure 関数が処理され、エラー画面に移動します。

.on_failure 関数で [200, {}, [env['omniauth.error'].inspect]] を実行すると発生するエラーは次のとおりです。

#<OAuth2::Error: : 
{"error":{"message":"Invalid redirect_uri: Given URL is not allowed by the Application configuration.","type":"OAuthException","code":191}}>

コマンドから関連していると思われるログは次のとおりです。

2013-08-27T22:44:20.842352+00:00 app[web.1]: Started GET "/auth/facebook" for 174.21.250.137 at 2013-08-27 22:44:20 +0000
2013-08-27T22:44:20.857734+00:00 heroku[router]: at=info method=GET path=/auth/facebook host=warm-anchorage-4172.herokuapp.com fwd="174.21.250.137" dyno=web.1 connect=10ms service=26ms status=302 bytes=262
2013-08-27T22:44:21.229031+00:00 heroku[web.1]: Stopping remaining processes with SIGKILL
2013-08-27T22:44:21.228882+00:00 heroku[web.1]: Error R12 (Exit timeout) -> At least one process failed to exit within 10 seconds of SIGTERM
2013-08-27T22:44:21.609111+00:00 app[web.1]: Started GET "/auth/facebook/callback?code=AQD4g5_eZRBzwOOvl_qI64mnKtk1b4048YuGXVyBjfxer9QrSBgiMwL8Nxsr0yducrL1DMfK3EdNS5E8qljb7BWvSoIoysfXF3tbIs6_7VkV2LiRVfrmZ8goku1MweG46hagJtatAJTbVfZkE6VL4t-pX169DCrn6TRhkfJoNAnRF8Xs2wHbPg1pwsUOOi_BJdRXNx9noZ8Cnc51unUVVKez-MStbD9OfDST5PNZNJzZJhaXiC_K2JpTg2S2z8tptsEAFf-gV5Rim86tN66FTCLG-HVhKBHp3bJgiYdC0160Kp8m0oKrO9lwMJQr6NBTOSw&state=fd82e1208e9848d0deda8271118799c38c4350f9c9f95fc6" for 174.21.250.137 at 2013-08-27 22:44:21 +0000
2013-08-27T22:44:21.609111+00:00 app[web.1]: Started GET "/auth/facebook/callback?code=AQD4g5_eZRBzwOOvl_qI64mnKtk1b404YuGXVyBjfxer9QrSBgiMwL8Nxsr0yducrL1DMfK3EdNS5E8qljb7BWvSoIoysfXF3tbIs6_7VkV2LiRVfrmZ8goku1MweG46hagJtatAJTbVfZkE6VL4t-pX169DCrn6TRhkfJoNAnRF8Xs2wHbPg1pwsUOOi_BJdRXNx9noZ8Cnc51unUVVKez-MStbD9OfDST5PNZNJzZJhaXiC_K2JpTg2S2z8tptsEAFf-gV5Rim86tN66FTCLG-HVhKBHp3bJgiYdC0160Kp8m0oKrO9lwMJQr6NBTOSwstate=fd82e1208e9848d0deda8271118799c38c4350f9c995fc6" for 174.21.250.137 at 2013-08-27 22:44:21 +0000
2013-08-27T22:44:21.700789+00:00 heroku[router]: at=error code=H13 desc="Connection closed without response" method=GET path=/auth/facebook/callback?code=AQD4g5_eZRBzwOOvl_qI64mnKtk1b4048YuGXVyBjfxer9QrSBgiMwL8Nxsr0yducrL1DMfK3EdNS5E8qljb7BWvSoIoysfXF3tbIs6_7VkV2LiRVfrmZ8goku1MweG46hagJtatAJTbVfZkE6VL4t-pX169DCrn6TRhkfJoNAnRF8Xs2wHbPg1pwsUOOi_BJdRXNx9noZ8Cnc51unUVVKez-MStbD9OfDST5PNZNJzZJhaXiC_K2JpTg2S2z8tptsEAFf-gV5Rim86tN66FTCLG-HVhKBHp3bJgiYdC0160Kp8m0oKrO9lwMJQr6NBTOSw&state=fd82e1208e9848d0deda8271118799c38c4350f9c9f95fc6 host=warm-anchorage-4172.herokuapp.com fwd="174.21.250.137" dyno=web.1 connect=2ms service=114ms status=503 bytes=0
2013-08-27T22:44:22.939414+00:00 heroku[web.1]: Process exited with status 137
2013-08-27T22:44:34.222678+00:00 app[web.1]: [2013-08-27 22:44:34] INFO  WEBrick 1.3.1
2013-08-27T22:44:34.222781+00:00 app[web.1]: [2013-08-27 22:44:34] INFO WEBrick::HTTPServer#start: pid=2 port=13228
2013-08-27T22:44:34.222678+00:00 app[web.1]: [2013-08-27 22:44:34] INFO  ruby 1.9.3   (2013-06-27) [x86_64-linux]

私の omniauth.rb は次のようになります。

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  if Rails.env.production?
    provider :facebook, "********72531693", "*******32c00b6bd32b70fa939e6a7c1"
    {:scope => 'PERMISSION_1, PERMISSION_2, PERMISSION_3...', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}}
  end
    provider :facebook, "********45876931", "*******2abe337c16c135f06404c91a"
    {:scope => 'PERMISSION_1, PERMISSION_2, PERMISSION_3...', :client_options => {:ssl => {:ca_file => '/usr/lib/ssl/certs/ca-certificates.crt'}}}
end

OmniAuth.config.on_failure = Proc.new do |env|
  UsersController.action(:omniauth_failure).call(env)
  #this will invoke the omniauth_failure action in UsersController.
end

確かではありませんが、localhost:3000 での開発では完璧に動作するため、heroku の問題であると確信しています。私の両方のアプリは、ホスト URL を除いて、開発バージョンと製品バージョンの Facebook でほぼ同じです。少なくともログインを試みることができるので、Facebook の設定とは何の関係もないと思います。omn​​iauth-facebook 1.4.0 と 1.4.1 の両方を使ってみました。

自分が見ていないものを誰かが見た場合に備えて、ルートファイルを追加します。

root  'welcome#index'
match '/signup',  to: 'users#new',  via: 'get'
match '/signin',  to: 'sessions#new', via: 'get'
match '/signout',  to: 'sessions#destroy', via: 'delete'
match '/about', to: 'static_pages#about', via: 'get'
match '/help', to: 'static_pages#help', via: 'get'
match '/auth/:provider/callback', to: 'sessions#createfb', via: 'get'
4

1 に答える 1

1

コールバックとして「localhost」または開発サーバーの URL を使用するように Facebook アプリケーションをセットアップしたことは間違いありません。運用サーバーの URL がアプリの一部として構成されていないため、運用に失敗しています。アプリの設定を確認してください。

編集: 「サイト URL」というフィールドがある「Facebook ログインのある Web サイト」というセクションが表示されます。に設定していませんlocalhost:3000か?

于 2013-08-27T23:32:42.947 に答える