2011-12-10 30 views
1

我跟着維基後添加的用戶名作爲設計的另一個身份驗證方法.. https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-sign_in-using-their-username-or-email-address使用用戶名或電子郵件的設計曹景偉錯誤

一旦我完成這些步驟,並試圖登錄我得到這個錯誤:

ActiveRecord::StatementInvalid in Devise::SessionsController#create 
SQLite3::SQLException: no such column: users.login: SELECT "users".* FROM "users" WHERE "users"."login" = '[email protected]' LIMIT 1 

正如您所看到的,create方法正在尋找一個登錄列。我不知道爲什麼會發生這種情況。我覆蓋了註冊控制器,並將self.find_for_authentication方法與其他方法一起添加到它。

有什麼想法?

我需要發佈什麼代碼才能提供更多線索?

+0

你在你的數據庫中有一列名爲login(或可能是登錄名)? – jamiethepiper

+0

沒有。我將用戶名列添加到用戶表中,並且where子句應檢查該列是否爲||電子郵件列與傳入的登錄參數匹配。 – Trent

+0

檢查設計版本,然後嘗試將find_for_authentication重命名爲find_for_database_authentication,因爲該wiki頁面中存在此註釋:較早的版本可能已調用find_for_authentication find_for_database_authentication。 –

回答

2

複製代碼時可能會遺漏一些細節。你確定你已經定義了def self.find_for_authentication,即類方法嗎?要確保雙重確認,請嘗試在方法定義中添加raise並查看是否會顯示錯誤。

+0

就是這樣。經過一番睡眠之後,我重新看了一遍我的代碼,發現我並沒有將find_for_authentication作爲類方法調用。謝謝您的幫助! – Trent

相關問題