2014-01-20 64 views
1

的Rails:4.0.0, 設計:3.0.0rc設計:: SessionsController增加了錯誤閃光燈,而不是模型

設計似乎沒有在所有的錯誤信息添加到模型,委託,要驗證。這通常很好。但是在SessionsController的情況下,將錯誤添加到模型是否有意義,以便您可以使用field_with_errors或某些此類功能,並在用戶沒有放入電子郵件時說'需要電子郵件'。

下面的代碼片段是我認爲我必須修改Devise才能讓模型添加錯誤的地方。

class Users::SessionsController < Devise::SessionsController 

    # POST /resource/sign_in 
    def create 
    self.resource = warden.authenticate!(auth_options) 

    debugger 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in(resource_name, resource) 
    respond_with resource, :location => after_sign_in_path_for(resource) 
    end 

end 

有沒有人有什麼建議做什麼?通過類似以下的方式在登錄時向模型添加錯誤甚至是一個好主意? error.add(:model, "error message")

這似乎是,如果我使用默認的flash [:notice]消息,那麼我錯過了能夠將錯誤消息附加到特定字段,這是我的目標。

回答

1

您的概念與除SessionsController外的任何其他控制器都是正確的。

這種模糊的信息是登錄活動所需的。如果用戶輸入了錯誤的信息,他只能看到「無效的電子郵件或密碼」或類似但不準確的錯誤。

原因是爲了減少粗暴簽署試驗的機會。

+0

感謝您的回答!我知道你不應該透露你係統中的賬戶信息,我會確保顯示的信息永遠不會是「這是一個不正確的密碼」。在「請輸入密碼」或「請輸入電子郵件」的情況下更是如此。要通知用戶他們忘了做什麼,而不是聲稱它只是「無效」。無效如何?如果他們沒有投入任何東西,我應該可以告訴他們他們沒有做他們應該做的一切。同時,我只是使用html5表單驗證來實現這一點。 – pedromaltez

+0

@佩德羅,我明白你的關切。可以通過重寫Devise FailureApp來修改該行爲。但是我認爲你的客戶端驗證足夠好,不需要花費更多時間。 –