2011-07-22 79 views
4

我正在嘗試使用Omniauth爲Google Apps提供簡單的基本身份驗證。一切工作正常本地(即使是在生產模式),但在Heroku我得到如下:爲什麼在嘗試使用Omniauth + Google Apps時,heroku會超時?

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-northscaledalli工作,並在任何情況下,我已驗證的隨機數被保存在./tmp正確的,所以我不知道認爲這是問題。

我收到一個關於CA證書的錯誤,但是指定了證書文件給fetcher解決了這個問題,而且我仍然得到了超時。

有什麼建議嗎?

更新: 我跟蹤到了OmniAuth的回調處理程序。請求會發送到Google Apps,但回撥控制器有機會執行任何操作之前回撥時間已到。

+0

你可能想嘗試使用2個dynos。 – s84

回答

4

好吧,經過多次拉動,看起來這是OmniAuth手寫Google Apps URI的問題。我已經結束了使用普通香草谷歌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 

前兩行消除了Heroku引發的一些SSL警告。我正在使用./tmp進行文件存儲,這工作得很好。在我的控制器中,我有一個if/then子句,用於在經過驗證的電子郵件中檢查我的域,並重定向到一個頁面,告訴用戶選擇正確的帳戶。

這不是一個創意解決方案,但我無法使用任何特定於應用程序的OpenID標識符獲取任何內容。

+0

我必須遺憾地贊成這個解決方案。 :)同意這是不理想的,但它也是完全有效的。謝謝@Kerinin! –

2

我有同樣的問題,但只有當我嘗試對與heroku應用程序響應的域相同的域進行身份驗證時。在Google應用上對其他域進行身份驗證可以正常工作。

我認爲這個問題是因爲有某種阻塞pingback從谷歌或omniauth gem到域/ openid?= some_number。由於dyno忙於爲/ auth/google_apps請求提供服務,因此它無法回答其他請求,因此超時。如果我找出避免阻止請求的方法,我會通知您。

+0

我遇到了同樣的問題。在1臺測功機上運行,​​增加到兩臺。第一次申請失敗,第二次申請失敗,我拿到了屏幕批准我的應用程序。仍然在回調中,我面臨另一個錯誤。在刷新時,我已登錄。 我的網站正在被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 
相關問題