2012-04-16 28 views
10

試圖「與谷歌登錄」後,我看到這個錯誤在日誌中:設計/ Omniauth失敗:如何調試?

Processing by Users::OmniauthCallbacksController#failure as HTML 

我可以從谷歌看到所有的數據通過URL發送(在日誌),包括用戶電子郵件和名稱。那麼會出現什麼問題呢?我的回調甚至沒有被執行。我只會重定向到我網站的sign_in頁面。

而且我非常確定所有的配置都是正確的,因爲幾星期前它工作正常。我不認爲我改變了任何事情。 Facebook登錄仍然正常。

有關如何調試此故障的任何想法?日誌中沒有別的東西,除了那些長滿URL和參數的值。只有INFO消息。上面提到的是唯一一個說失敗的人。

UPDATE

我添加了一個 '失敗' 方法給控制器

def failure 
    render :text => params.inspect 
end 

哪停止重定向,並打印該:

{} 

的網址是這樣的:

/users/auth/google/callback?_method=post&openid.ns=http%3A%2F%2Fspecs.openid.net%2Fauth%2F2.0&openid.mode=id_res&openid.op_endpoint=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fud&openid.response_nonce=2012-04-16T12%3A25%3A49Z_v1fNngSQJaHBQ&openid.return_to=http%3A%2F%2Fdev.myapp.me%3A3000%2Fusers%2Fauth%2Fgoogle%2Fcallback%3F_method%3Dpost&openid.assoc_handle=AMlYA9Urw_lYamPphTSdQ9a6DU0Ez0y5RaDDM78qPL7Xgm77nMpJiB85&openid.signed=op_endpoint%2Cclaimed_id%2Cidentity%2Creturn_to%2Cresponse_nonce%2Cassoc_handle%2Cns.ext1%2Cext1.mode%2Cext1.type.ext5%2Cext1.value.ext5%2Cext1.type.ext8%2Cext1.value.ext8%2Cext1.type.ext2%2Cext1.value.ext2&openid.sig=2FPjo7U1e%2Fde248XpUgjQLduNAM%3D&openid.identity=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.claimed_id=https%3A%2F%2Fwww.google.com%2Faccounts%2Fo8%2Fid%3Fid%3DAItOawk1F5U6x_-kJnydjoww5haU41tquh1Zl2c&openid.ns.ext1=http%3A%2F%2Fopenid.net%2Fsrv%2Fax%2F1.0&openid.ext1.mode=fetch_response&openid.ext1.type.ext5=http%3A%2F%2Faxschema.org%2FnamePerson%2Ffirst&openid.ext1.value.ext5=Some_User&openid.ext1.type.ext8=http%3A%2F%2Faxschema.org%2Fcontact%2Femail&openid.ext1.value.ext8=some_email%40gmail.com&openid.ext1.type.ext2=http%3A%2F%2Faxschema.org%2FnamePerson%2Flast&openid.ext1.value.ext2=Some_User 

所以問題是我需要的所有數據都在URL中,但是devise/omniauth並沒有抓住它(顯然這就是爲什麼它調用'失敗'方法而不是我的回調)。我不知道應該通過'params'數組還是可以訪問它。

我也對?_method=post部分感興趣,因爲所有對我的網站的請求都是GET請求。也許這只是意味着omniauth對谷歌所做的請求是POST。

有什麼想法?

回答

0

您最近是否升級了您的寶石?如果是這樣,將omniauth和devise版本與以前的gem版本進行比較可能會很有用。它也可能是一個omniauth/devise依賴關係發生了變化。

我不完全確定這個特定情況下的問題,但是如果您想深入挖掘代碼,請安裝pry-debug gem。它爲您提供pry界面,包含步驟和下一個調試命令。在您的代碼中添加pry.binding,它將停止在服務器中的執行並調出pry界面。例如:

def failure 
    binding.pry 
    render :text => params.inspect 
end 
+2

你也應該讓人們知道,他們將需要安裝撬寶石這個工作https://github.com/pry/pry – Will 2012-10-24 05:44:59

2

我知道這是一個古老的問題,但我有這個相同的問題,沒有我在網上找到的幫助。發現這個問題是由我如何使用Puma(從Thin帶來的實踐)造成的。我在同一臺計算機上啓動了多個Puma進程(Apache反向代理),看起來Github的回調將進入與原始認證請求不同的Puma進程。 我把Puma進程降到了一個,並且沒有再次發生這種情況。(轉而使用Puma工人:puma -w 5,後者又使用由Puma管理的進程而不是Apache循環)。這也是爲什麼我從未在開發中偶然發現過這個問題,因爲我沒有在該環境中運行一個進程集羣。

2

我意識到,這是一個老問題,並且誰最初提出,要麼解決它或移動到其他解決方案的人,但是,我遇到了同樣的問題,我的解決方案的追求導致我在這裏。

我設法解決它,所以這裏是尋找它的下一個人。

原來是微不足道。這是我有:

# config/initializers/omniauth.rb 
Rails.application.config.middleware.use OmniAuth::Builder do 
    provider :github, ENV['github_key'], ENV['github_secret'] 
end 

# config/initializers/devise.rb 
Devise.setup do |config| 
    # ... devise config not related to omniauth ... 
    config.omniauth :github, ENV['github_key'], ENV['github_secret'] 
end 

所以,我在兩個地方配置omniauth提供程序,它是衝突的。

後我刪除從omniauth.rb的配置,從GitHub到/auth/github/callback重定向請求開始被通過Users::OmniauthCallbacksController#github代替#failure處理爲是之前的變化情況。

那麼愚蠢錯誤,這麼少的信息一起工作......

3

要回答你如何調試Omniauth原來的問題,這裏是如何啓用日誌記錄Omniauth。該行添加到config/initializers/devise.rb剛過定義你的Omniauth策略:

OmniAuth.config.logger = Rails.logger if Rails.env.development? 

(如果你不使用設計,只是Omniauth,然後添加代碼而不是config/initializers/omniauth.rb

你會獲得更多的負載來自Omniauth的信息在您的日誌文件中 - 包括來自回調階段的完整響應。

+0

意想不到的回答,謝謝。 – 2017-04-19 13:37:44