2011-07-22 5 views
4

私はOmniauthを使用して、Google Appsに対して簡単で基本的な認証を提供しようとしています。すべてはローカルで(プロダクションモードでも)うまく動作しますが、Herokuでは次のようになります。Omniauth + Google Appsを使用しようとすると、なぜヒロクがタイムアウトしますか?

app[web.1]: Started GET "/auth/admin" for 24.155.228.161 at Fri Jul 22 15:10:26 -0700 2011 
heroku[router]: Error H12 (Request timeout) -> GET example.com/auth/admin dyno=web.1 queue= wait= service=30000ms status=503 bytes= 
heroku[router]: Error H12 (Request timeout) -> GET example.com/ dyno=web.1 queue= wait= service=30000ms status=503 bytes=0 
app[web.1]: Generated checkid_setup request to https://www.google.com/a/example.com/o8/ud?be=o8 with assocication AOQobUegRUNfEpz1JOO2bZe0zXrjkdIvdsjpVyCh3rtbL_s-GSfhQ_zY 

設定は次のとおりです。

# initializers/omniauth.rb 
require "openid/fetchers" 
OpenID.fetcher.ca_file = "#{Rails.root}/cacert.crt" 

require 'openid/store/filesystem' 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :google_apps, OpenID::Store::Filesystem.new('./tmp') 
    use OmniAuth::Strategies::GoogleApps, OpenID::Store::Filesystem.new('./tmp'), :name => 'admin', :domain => 'bcarc.com' #, :client_options => {:ssl => {:ca_file => './cacert.crt'}} 
end 

私はmemcachedのに切り替える試みたが、私は仕事にmemcached-northscaleまたはdalliのいずれかを取得することはできませんし、どのような場合でも、私はナンスが正しく./tmpに保存されていることを確認しましたので、私はしないでくださいそれが問題だと思う。

CA証明書に関するエラーが発生しましたが、フェッチャに証明書ファイルを指定するとその問題が解決されましたが、まだタイムアウトしています。

提案がありますか?

更新: これをOmniAuthのコールバックハンドラまで追跡しました。要求はGoogle Appsに送信されますが、コールバックコントローラーが何かを実行する前にコールバックがタイムアウトします。

+0

2dynosを試してみてください。 – s84

答えて

4

OK、これはOmniAuthハンドラインのGoogle Apps URIに問題があるようです。私はプレーンバニラgoogleのOpenIDエンドポイントを使用して終了し、私のコントローラで手動でドメインを確認しています。興味のある人は、私のコードは次のようになります:

require "openid/fetchers" 
OpenID.fetcher.ca_file = "#{Rails.root}/cacert.crt" 

require 'openid/store/filesystem' 

Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :openid, OpenID::Store::Filesystem.new('./tmp') 

    use OmniAuth::Strategies::OpenID, OpenID::Store::Filesystem.new('./tmp'), :name =>  'openid', :identifier => 'https://www.google.com/accounts/o8/id' 
end 

最初の2行は、HerokuがスローするいくつかのSSL警告を削除します。私は./tmpをファイルストレージに使用していますが、うまく動作しています。私のコントローラーには、認証された電子メールで自分のドメインをチェックし、正しいアカウントを選択するようにユーザーに指示するページにリダイレクトするif/then節があります。

これはアイデアの解決策ではありませんが、アプリケーション固有のOpenID識別子を使用して動作するものは得られませんでした。

+0

私は残念ながらこの解決策をupvoteする必要があります。 :)最適ではないが、それは完全に機能的であるということに同意した。ありがとう@ケリーニン! –

2

私は同じ問題を抱えていますが、英雄アプリが応答しているドメインと同じドメインに対して認証しようとしているだけです。 Google Appsの他のドメインに対する認証は正常に動作します。

私は、Google/omniauth gem、domain/openid?some_numberのいずれかにpingbackをブロックしていると考えています。 dynoは/ auth/google_appsのリクエストを処理するために忙しいので、他のリクエストに答えることができず、タイムアウトします。ブロックリクエストを避ける方法を見つけたらお知らせします。

+0

私は同じ問題を抱えていました。 1 dynoで走っていた、2に増加しました。最初のリクエストが失敗し、2番目のリクエストが通過し、私のアプリを承認する画面が表示されました。まだコールバックで私は別のエラーに直面した。リフレッシュすると、私はログインしました。 私のサイトはGoogleによって索引付けされていたようです。そのため、常にdynosが消費されていたためタイムアウトが説明される可能性があります。 –

0

私は開発で同じ問題を抱えていました。 @ Kerininのハードワークに基づいて、これは私が終わったところで、これまで働いていたようです...

Rails.application.config.middleware.use OmniAuth::Builder do 
use OmniAuth::Strategies::OpenID, name: 'openid', identifier: 'https://www.google.com/accounts/o8/id' 
end 
関連する問題