需要在此代码中将params列入白名单的最佳方法

时间:2013-11-19 17:53:36

标签: ruby-on-rails ruby strong-parameters

我需要在ConfirmationsController中将此代码转换为在Rails 4中工作。我对强参数的要求有困难。我正在使用的代码直接来自Devise page

我很确定我用params调用的任何东西都需要列入白名单,但在这种情况下我无法弄清楚如何做到这一点。实现这一目标的最佳方法是什么。

class ConfirmationsController < Devise::ConfirmationsController

def show
  self.resource = resource_class.find_by_confirmation_token(params[:confirmation_token]) if params[:confirmation_token].present?
  super if resource.nil? or resource.confirmed?
end

def confirm
  self.resource = resource_class.find_by_confirmation_token(params[resource_name][:confirmation_token]) if params[resource_name][:confirmation_token].present?
  if resource.update_attributes(params[resource_name].except(:confirmation_token).permit(:password, :password_confirmation)) && resource.password_match?
    self.resource = resource_class.confirm_by_token(params[resource_name][:confirmation_token])
    set_flash_message :notice, :confirmed
    sign_in_and_redirect(resource_name, resource)
  else
    render action: "show"
  end
end
  end

1 个答案:

答案 0 :(得分:1)

试试这个:

class ConfirmationsController < Devise::ConfirmationsController
  def show
    self.resource = resource_class.find_by_confirmation_token(confirmation_token) if confirmation_token.present?
    super if resource.nil? or resource.confirmed?
  end

  def confirm
    self.resource = resource_class.find_by_confirmation_token(confirmation_token) if confirmation_token.present?
    if resource.update_attributes(resource_params) && resource.password_match?
      self.resource = resource_class.confirm_by_token(confirmation_token)
      set_flash_message :notice, :confirmed
      sign_in_and_redirect(resource_name, resource)
    else
      render action: "show"
    end
  end

  private

  def resource_params
    # pry
    # debugger 
    params.require(resource_name).permit :password, :password_confirmation
  end

  def confirmation_token
    params.require(resource_name).permit :confirmation_token
  end
end

更多信息:https://github.com/rails/strong_parameters 如果你继续遇到麻烦,我建议在中间填充一个调试器或pry并使用permit |来操作params。 require直到你得到你期望的结果。