我想知道如何集成这两个宝石(设计+强参数),因为强力参数可能会被添加到4.0中的rails核心
欢迎任何帮助 感谢
答案 0 :(得分: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
添加两个宝石后,设计将正常工作。
更新:使用最新版本的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找到,它会覆盖某些控制器。
答案 1 :(得分:8)
简单的方法是在ApplicationController中添加一个简单的过滤器。如果您有不同的角色和/或其他更复杂的场景,则下面的链接还有其他选项:
答案 2 :(得分: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
答案 3 :(得分: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
这将适用于导轨4和5的装置和导轨