Rails和Devise的强参数

use*_*888 54 ruby-on-rails devise strong-parameters

我正在使用rails 4.0分支的设计以及ruby 2.0.0p0和Rails 4.0.0.beta1.

这是一个问题,我在检查我是否以正确的方式进行,或者我还有其他事情要做.我确信很多人转向Rails 4.0都面临着同样的问题(谷歌搜索类似的东西后).

我已阅读以下链接:

现在使用devise我创建了一个User模型,我使用上面的gists创建了以下控制器(并确保将它包含在我的routes文件中).我的额外参数是first_name和last_name.

class Users::RegistrationsController < Devise::RegistrationsController
  def sign_up_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end
  def account_update_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
  end
  private :sign_up_params
  private :account_update_params
end
Run Code Online (Sandbox Code Playgroud)

还有什么我应该做的吗?这是从现在开始做事的最佳方式(因为放弃了attr_accessor).我的表单似乎工作正常(新的和更新).gists说使用"resource_params"但是在我的服务器日志中总是给出"Unpermitted parameters"错误.

Zol*_*tan 66

感谢Devise的Rails4分支的最新更新,它不需要插入'resource_params'.

我已经创建了一个全新的Rails4应用程序,并遵循基本的Devise安装步骤,我的应用程序正常工作,所以我想,你做得很好.

但是如果您需要,有一个修改后的要点,根据允许的参数为您提供一些额外的细节:

资料来源:https://gist.github.com/bluemont/e304e65e7e15d77d3cb9

# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :configure_permitted_parameters

  protected

  # my custom fields are :name, :heard_how
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:name, :heard_how,
        :email, :password, :password_confirmation)
    end
    devise_parameter_sanitizer.for(:account_update) do |u|
      u.permit(:name,
        :email, :password, :password_confirmation, :current_password)
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!救了我. (3认同)

Ron*_*ain 26

对于Rails 5,Devise 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: [:first_name, :last_name, :email, :password, :password_confirmation])
  end
end
Run Code Online (Sandbox Code Playgroud)

参考


Rok*_*san 7

它的工作原理很不错,在增加一个模块config/initializers与所有parameters喜欢这个

module DevisePermittedParameters
  extend ActiveSupport::Concern

  included do
    before_filter :configure_permitted_parameters
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
  end

end

DeviseController.send :include, DevisePermittedParameters
Run Code Online (Sandbox Code Playgroud)