设计和强大的参数

Rod*_*rek 39 ruby ruby-on-rails devise ruby-on-rails-3 strong-parameters

我想知道如何集成这两个宝石(设计+强参数),因为强的params可能会被添加到4.0中的rails core

欢迎任何帮助谢谢

ron*_*chn 53

更新设计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
Run Code Online (Sandbox Code Playgroud)

添加两个宝石后,设计将正常工作.

更新:使用最新版本的Devise 3.x,如设计#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
Run Code Online (Sandbox Code Playgroud)

对于Devise 2.x,如果您使用安全功能,要求在用户模型中明确列入污染参数:

include ActiveModel::ForbiddenAttributesProtection
Run Code Online (Sandbox Code Playgroud)

所需的更改可在https://gist.github.com/3350730上找到,它会覆盖某些控制器.


小智 8

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

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