Category: Ruby

Rails 3 + Dynamic form + i18n + PL

Kolejnym problemem na jaki natrafilem (nielicząc niezliczonej ilości html_safe ;) ) było to, że error_messages_for nie jest już częścią railsów. Jest pluginem zewnętrznym.

A jako taki, trzeba go zainstalować go poleceniem:

rails plugin install git://github.com/rails/dynamic_form.git

Po tym zabiegu pozostaje nam wykonanie jeszcze jednej zmiany. Z racji tego, że "wyrzucanie" błędów do formularzy, nie jest już domeną tylko activerecord, musimy przenieść "errorsy" z gałęzi ActiveRecord, do niezależnej gałęzi. Tak więc, fragment:

  errors:
    template:
      body: "Wystąpił problem w następujących polach:"
      header:
        one: "Jeden błąd uniemożliwił przesłanie formularza:"
        other: "Następujące błędy uniemożliwiły przesłanie formularza:"

musi być w niezależnej gałęzi pliku jezykowego.

Od tego momentu, wszystko będzie działać jak w Rails2 :)

Edit: Dla pewności (ze względu np. na kompatybilność z różnymi pluginami, radzę pozostawić kopię, w pierwotnej gałęzi (czyli po prostu kopiujemy errors do trzonu języka).

Logi systemowe w Rails a hasła i inne newralgiczne dane

Środowisko Rails przechowuje w logach wiele danych. M.in to co przesyłamy w żądaniach.

Problem pojawia się gdy przesyłamy login i hasło (np. podczas logowania lub rejestracji). Osoba która uzyska dostęp do logów, mogłaby z nich "wyciągnąć" te newralgiczne dane. Aby temu zapobiec, należy "przysłonić" wrzucanie do logów tych pól z formularzy które są niebezpieczne.

Aby to zrobić należy skorzystać z metody:

  filter_parameter_logging

Która po podaniu parametrów usunie je, zanim trafią do loga. Aby w całej naszej aplikacji przysłonić tworzenie logów zawierających hasła wystarczy w kontrolerze aplikacji (ApplicationController) dodać następująca linijkę:

  filter_parameter_logging :password

Dzięki temu, mając jakiekolwiek pola zawierające słowo password, ich zawartość zostanie zamieniona na [FILTERED]. Nie ma to znaczenia czy są w hashu zawierającym hasha:

params[:test][:deeper][:password]
params[:test][:deeper][:password_confirmation]

Czy też "na wierzchu":

params[:password]
params[:password_confirmation]

W każdym z tych przypadków, hasła nie zostaną zapisane w logach.

Copyright © 2026 Closer to Code

Theme by Anders NorenUp ↑