Czy mimo to można wyłączyć przy użyciu silnych parametrów?W Railsach 4 wyłącz domyślnie Silne parametry
Wiem, że to luka w zabezpieczeniach, ale naprawdę tego nie potrzebuję/chcę.
Czy mimo to można wyłączyć przy użyciu silnych parametrów?W Railsach 4 wyłącz domyślnie Silne parametry
Wiem, że to luka w zabezpieczeniach, ale naprawdę tego nie potrzebuję/chcę.
Jeśli przez "wyłączyć" rozumiesz powrót do linii Rails 3-style attr_accessible
, to tak.
Po prostu użyj klejnotu protected_attributes.
Nie sądzę.
DHH komentuje here on this pull request to add a disable switch to strong parameters
Wszystko to jest dziedzictwem koncern i tak szybko, jak Rails 4.0 zmusi silne parametrów na wszystkich i nie będzie w stanie go wyłączyć.
Wyłączenie ochrony atrybutów jest prawie zawsze złym pomysłem.
Z tego obowiązkowego notatki z drogi, oto jak go wyłączyć:
config.action_controller.permit_all_parameters = true
Place to w config/application.rb
Oczywiście można! Według oficjalnych Dokumentów Silne parametry'S (https://github.com/rails/strong_parameters), można wyłączyć dodając poniżej kody do config/environment.rb:
config.active_record.whitelist_attributes = false
To działa na mnie w szynach 3,2
służy do wyłączenia protected_attributes – brauliobo
wpadłem na ten problem, gdzie próbował zapisać wszystkie parametry z webhooka od Stripe.
Jeśli chcesz zezwolić na wszystkie parametry dla pojedynczej instancji, możesz wywołać #to_hash na obiekcie params przed przekazaniem go do metody initialize.
Ex:
@my_object = MyObject.new(params[:my_object].to_hash)
zatrzymać zakazanego atrybuty są sprawdzane pod kątem aplikacji można łata się czek ..
na przykład umieścić następujący kod w
config/inicjalizatory/disable_strong_parameters.rb
module ActiveModel
module ForbiddenAttributesProtection
protected
def sanitize_for_mass_assignment(attributes)
attributes
end
alias :sanitize_forbidden_attributes :sanitize_for_mass_assignment
end
end
Po prostu wypróbowałem to i nie zadziałało dla ja (w aplikacji Rails 4.0.0). – Batkins
Pracowałem dla mnie. Zgoda - to na ogół zły pomysł - ale moim przypadkiem użycia jest strona administracyjna, w której administratorzy mogą coś zmienić. – Zubin
To zadziałało dla mnie. Pamiętaj, aby umieścić linię wewnątrz klasy Application i zrestartować serwer HTTP. – Guildenstern70