2011-04-03 62 views
2

我在設計中使用OmniAuth以允許用戶使用Facebook登錄或使用用戶名和密碼創建普通帳戶。當我最初設置它時,我使用了Railscasts的優秀指示。一切工作都非常好,2個月以上,但只是在Facebook登錄停止工作的前一天。 OmniAuth會將您帶到Facebook的身份驗證,然後返回:http://localhost:3000/auth/failure?message=invalid_responseOmniAuth無效的響應錯誤

Google對於導致此錯誤的原因或解決方法沒有任何建議,OmniAuth文檔也不會。我試圖通過他們的代碼挖很好,但這個錯誤我發現的唯一一提的是這一點,在/oa-oauth/lib/omniauth/strategies/oauth.rb

rescue ::MultiJson::DecodeError => e 
    fail!(:invalid_response, e) 
end 

有沒有人見過這個錯誤!?知道它是什麼或如何解決它?!這使我無法啓動此應用程序,所以任何幫助將非常感激!

感謝, JG

+0

嘗試在服務器上重新同步時間? – zkidd 2011-04-04 03:43:18

+0

不是問題。我們在heroku上,所以服務器時間不在我們的控制範圍內(我也不認爲這會導致這個錯誤)。 – erskingardner 2011-04-04 06:19:58

回答

1

好吧,

我不知道爲什麼這工作,但它有,所以我會在努力幫助別人認爲這個問題最終張貼在這裏。

我升級了我的應用程序使用紅寶石1.9.2(未來的方式!)和爆炸,它只是再次工作。不知道爲什麼,但有時候,這只是它的方式。

升級雖然很容易。我被升級爲dhh tweet &,發現thisthis是真正有用的資源,確保您的1.8.7代碼可以在1.9.2中運行。支持heroku以及使升級應用程序變得如此簡單。

+0

升級到紅寶石1.9.2也幫助我。 – digitalWestie 2011-05-19 10:44:20

2

對於通過谷歌發現此問題的其他人,heroku_backup_task是我的罪魁禍首。當我們將其添加到我們的gem文件時,OmniAuth解碼失敗導致此錯誤。我認爲這是一些JSON衝突。

不確定爲什麼它不會在1.9.2上發生,但我可以確認升級到1.9.2可以修復它,但如果您的應用程序中的所有寶石都不能很好地發揮作用並且降級,則可能會在應用程序中導致其他問題heroku似乎是一個不行。我現在必須銷燬並重新創建我的應用程序,以便發現問題。

1

我有同樣的問題,我想我找出解決方案。 在教程,RailsCast #235給authentications_controller.rb

def create 
    auth = request.env["rack.auth"] 
    current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], 
                    auth['uid']) 
    flash[:notice] = "Authentication successful." 
    redirect_to authentications_url 
end 

但是,

auth = request.env["rack.auth"] 

不再omniouth存在0.2.3

auth = request.env["omniauth.auth"] 

是正確的。

3

我在相同的情況下遇到了這個錯誤。設計拯救一個不相關的異常並將其作爲一個認證失敗來處理。我搶先制定由控制器處理異常:

# authentications_controller.rb 
    def create 
    omniauth = request.env["omniauth.auth"] 
    # Blah 
    # blah 
    # Blark! 
    rescue Exception => e 
    # Just spit out the error message and a backtrace. 
    render :text => "<html><body><pre>" + e.to_s + "</pre><hr /><pre>" + e.backtrace.join("\n") + "</pre></body></html>" 
1

OK,那麼,對不起,張貼到這樣一個老問題,但是已經遵循這個Railscasts教程中,我居然也得到了同樣的錯誤。我得出的結論是,omniauth-twitter gem的錯誤處理引起了混淆,因爲它隱藏了潛在的錯誤。我通過將omniauth-facebook gem添加到我的應用程序並使用它進行身份驗證來解決問題。

這很快發現我的應用程序出現了根錯誤,這是我將User.create_with_omniauth方法放入用戶控制器而不是模型,這是一個新手錯誤,但很容易解決。

通過使用Facebook Gem,我的錯誤很容易,而且有點不相干,錯誤處理使我能夠快速理解問題並解決問題。如果您正在努力解決這個問題,請嘗試Facebook或其他提供商,看看您是否可以更輕鬆地解決根本問題,並且肯定會避免一些更復雜的問題,例如升級到Ruby!