2011-03-09 61 views
4

我根據瑞安貝茨screencast與omniauth

與omniauth加入Facebook驗證我的應用程序Facebook驗證有與認證控制器的創建功能的問題。 創建函數應該處理Facebook的回調(這似乎很好)。

在日誌文件中的錯誤是:

NoMethodError(未定義的方法 '認證的零:NilClass)

該錯誤是指這條線在創建函數在認證控制器:

current_user.authentications.find_or_create_by_provider_and_uid(AUTH [ '提供商'],AUTH [ 'UID'])

您認爲是什麼問題?

感謝,

俄德

+0

安置自己的用戶和身份驗證模型,請。 – McStretch 2011-03-09 14:33:26

+0

對不起,我忽略了錯誤信息的內容。請參閱下面的答案。如果你需要幫助來確定爲什麼current_user是零,你必須發佈你用來獲取current_user的代碼。 – McStretch 2011-03-09 14:55:36

回答

4

問題是,當您嘗試進行身份驗證時,您未登錄,因此current_user爲零。登錄並進行身份驗證,您將被重定向到身份驗證索引頁面。這是他在railscast中做到的方式。在下一集中,他解決了未登錄的用戶。

1

current_user是零,所以當您試圖訪問一個零對象,你得到你所看到的錯誤消息的認證。

您需要修復您的current_user方法。

+0

我不確定current_user方法在哪裏。我認爲這是在「設計」寶石。任何方式我沒有寫這個方法。 – 2011-03-09 15:16:22

+0

你是對的,它是由設計提供的幫手方法。你運行耙db:遷移?查看設計的「入門」部分:https://github.com/plataformatec/devise – McStretch 2011-03-09 15:24:01

+0

您是否知道在哪裏可以檢查助手是否在我的應用程序中? – 2011-03-09 15:33:41

0

我也有同樣的問題,但它解決了。 引發此錯誤的原因是AuthenticationController的create action期望存在當前登錄的用戶並嘗試爲該用戶查找或創建新的身份驗證。由於我們嘗試進行身份驗證時未先用用戶名和密碼登錄,current_user變量將爲零。

按照鏈接來解決問題http://railscasts.com/episodes/236-omniauth-part-2?view=asciicast