40

我想知道如何集成这两个 gem(设计 + 强参数),因为强参数可能会在 4.0 中添加到 rails 核心

欢迎任何帮助谢谢

4

4 回答 4

55

设计 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找到,它覆盖了一些控制器。

于 2012-08-17T03:56:24.193 回答
9

简单的方法是在 ApplicationController 中添加一个简单的前置过滤器。如果您有不同的角色和/或其他更复杂的场景,下面的链接还有其他选项:

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

于 2013-07-16T13:08:37.813 回答
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
于 2015-09-15T05:27:17.260 回答
0

你也可以试试这个它包括嵌套参数许可

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

这将适用于 rails 4 和 5 devise 和 rails

于 2019-05-03T10:57:05.553 回答