2012-08-10 12 views
39

मैं चाहते हैं पता करने के लिए इस रत्न के दोनों एकीकृत करने की विधि (वसीयत + मजबूत पैरामीटर), के बाद से मजबूत पैरामीटर संभावना 4.0वसीयत और मजबूत पैरामीटर

में रेल कोर में जोड़ दिया जाएगा किसी भी मदद का स्वागत करते धन्यवाद

है

उत्तर

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#strong-parameters पर वर्णित अनुसार, Devise 3.x के नवीनतम संस्करण के साथ, प्रमाणीकरण कुंजी (आमतौर पर ईमेल फ़ील्ड), और पासवर्ड फ़ील्ड पहले से ही अनुमति है। हालांकि, अगर साइनअप फॉर्म पर कोई अतिरिक्त फ़ील्ड हैं, तो आपको अनुमति देने के लिए अतिरिक्त फ़ील्ड को डिवीज को जाने की आवश्यकता होगी।

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

अगला उत्तर मेरे विचार से बेहतर है, क्योंकि यह डेविस सार्वजनिक एपीआई – msa7

+1

पर रिले है क्योंकि ऐसा इसलिए होगा क्योंकि मेरा जवाब एक साल पहले से था। मैंने नए विकास के आधार पर उत्तर अपडेट किया है। – ronalchn

+0

यह प्रश्न दुनिया का कितना छोटा है इसका एक आदर्श उदाहरण है, आपने मेरे प्रश्न का उत्तर मेरे अपने गिस्ट = डी –

8

आपके एप्लिकेशन नियंत्रक में फ़िल्टर से पहले एक सरल जोड़ने का आसान तरीका है। आप अलग-अलग भूमिकाओं और/या अन्य अधिक जटिल परिदृश्य तेज है, तो नीचे दिए गए लिंक पर अन्य विकल्प हैं:

https://github.com/plataformatec/devise#strong-parameters

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 

कॉपी और यह भी बजाय अपने आवेदन नियंत्रक के लिए इस कोड को पेस्ट,: firstname, और अन्य फ़ील्ड, आपको अपने फ़ील्ड जोड़ना होगा।

+0

हाँ का उपयोग करने की आवश्यकता है, यह करने का यह नया तरीका है। सवाल उस दिन वापस पूछा गया था जब देवता ने अपने कोड पर मजबूत पैरामीटर लागू नहीं किए थे। –

संबंधित मुद्दे