2012-01-27 107 views
0

我將應用程序中的身份驗證升級爲使用Rails 3.1的has_secure_password設施。在這個過程中,我創建了一個頁面以允許用戶更改他們的密碼。我測試了它,它在我的開發機器上工作,無論是在開發環境還是在生產環境中。Rails 3.2 has_secure_password在部署到Heroku時無提示失敗

當我將應用程序部署到Heroku時,我去嘗試它,它似乎工作,除非當我註銷並重新登錄時,我的密碼未更改。我試着在控制檯中手動更改密碼,並且工作正常。如果我嘗試輸入不同的密碼和確認文本,它會顯示它應該進行的驗證,這意味着密碼正確發送到應用程序。

下面是相關更改我的控制器:https://github.com/mjm/sis-lunch/commit/930ced467a0e23ad48f4497999183112c5f846b1#diff-2

有我丟失的東西?在Heroku的製作過程中可能會出現什麼問題,可能會導致這種情況悄然失敗?

回答

0

我相信我明白了。我將應用程序部署到Heroku,然後運行遷移。該應用程序沒有完全知道新的password_digest列,但新的控制檯,所以他們工作得很好。使用heroku restart重新啓動應用程序修復了它。

0

我不確定你是如何在你的開發機器上測試它的,因爲PeopleControllerTest是空的,但是密碼字段被保護免受質量分配。它不應該以PeopleController的方式工作。 (這是件好事!)

您需要在控制器中明確呼叫Person#password =

ActiveModel::SecurePassword的相關Rails源代碼可以向您顯示使用has_secure_password時會發生的情況。

+0

您確定嗎?該代碼僅使password_digest受保護,而不是密碼,並且我能夠登錄到生產控制檯並通過attributes =分配這些屬性。 – 2012-01-28 05:54:24

+0

啊,不,你說得對。當我比較我的筆記時,我忽略了attr_accessible。回到繪圖板... – fixlr 2012-01-28 06:20:39

+0

我真的回答了我自己的問題,事實證明,我只需在遷移後重新啓動應用程序。 – 2012-01-28 16:58:26