Подтвердить что ты не робот

Разработка и сильные параметры

Я хотел бы знать, как интегрировать оба этих драгоценных камня (devise + Strong Parameters), поскольку сильные параметры, скорее всего, будут добавлены к ядру rails в 4.0

любая помощь приветствуется спасибо

4b9b3361

Ответ 1

Обновление для разработки 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

Для Devise 2.x, если вы используете функцию безопасности, требующую явно перенаправлять испорченные параметры в пользовательской модели:

include ActiveModel::ForbiddenAttributesProtection

необходимые изменения находятся в https://gist.github.com/3350730, который переопределяет некоторые из контроллеров.

Ответ 2

Самый простой способ - добавить простой фильтр перед вашим фильтром ApplicationController. Если у вас разные роли и/или другой более сложный сценарий, есть другие варианты по ссылке ниже:

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

Ответ 3

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

Ответ 4

Вы также можете попробовать это включить разрешение вложенных параметров

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

  protected

  def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:username,:phone])
  # permit nested attributes
  # devise_parameter_sanitizer.permit(:sign_up, keys: 
  # [:username,:phone,profile_attributes:[:firstname, :lastname]])
  end
end

Это будет работать с рельсами 4 и 5 и рельсами