2012-08-10 28 views
39

我想知道如何既這種寶石的整合(設計+強大的參數),因爲強PARAMS可能會在4.0設計和強大的參數

被添加到Rails核心的任何幫助,歡迎 感謝

回答

52

更新色器件4.x的

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username]) 
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username]) 
    devise_parameter_sanitizer.permit(:account_update, keys: [:username]) 
    end 
end 

將兩個寶石後,設計將恢復正常。

更新:使用最新版本的Devise 3.x,如devise#strong-parameters所述,驗證密鑰(通常是電子郵件字段)和密碼字段已被允許。但是,如果註冊表單上有任何其他字段,則需要讓Devise知道允許的額外字段。要做到這一點最簡單的方法是用一個過濾器:

class ApplicationController < ActionController::Base 
    before_filter :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) << :username 
    end 
end 

對於設計2.x中,如果使用需要明確的用戶模型白名單污點參數的安全功能:

include ActiveModel::ForbiddenAttributesProtection 

的變化需要被發現在https://gist.github.com/3350730覆蓋了一些控制器。

+0

從我的角度來看,下一個答案是更好的,因爲它接受了Devise public API – msa7 2013-12-15 06:43:42

+1

這將是因爲我的答案是一年多以前。我根據新的發展更新了答案。 – ronalchn 2013-12-15 09:14:13

+0

這個問題是一個完美的例子,世界有多小,你用我自己的要求回答了我的問題= D – 2014-01-15 18:19:47

1
before_filter :configure_sanitized_params, if: :devise_controller? 

def configure_sanitized_params 
    devise_parameter_sanitizer.for(:sign_up) {|u| u.permit(:firstname, :designation_id ,:middlename, :previous_experiance_year,:previous_experiance_month,:lastname, :email, :username, :password, :password_confirmation, :previous_experiance,:empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone,:deactivated_date,:image)} 
    devise_parameter_sanitizer.for(:account_update) {|u| u.permit(:remove_image,:firstname, :designation_id ,:middlename, :lastname, :email, :username, :empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone, :deactivated_date,:image)} 

end 

將此代碼複製並粘貼也代替您的應用程序控制器,:名字,和其他領域,你必須添加你的領域。

+0

是的,這是新的方法。該問題在設計未在其代碼上實現強參數的那一天被問到。 – 2015-09-15 14:36:01