具有Devise的强参数:current_password属性

时间:2013-05-30 07:14:55

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

关于在RegistrationController中添加:current_password属性是否正确的问题?

include ActiveModel::ForbiddenAttributesProtection

的用户模型
# app/model/user.rb

class User < ActiveRecord::Base
include ActiveModel::ForbiddenAttributesProtection

继承自Devise密码控制器的密码控制器

# app/controllers/users/passwords_controller.rb

class Users::PasswordsController < Devise::PasswordsController
  def resource_params
    params.require(:user).permit(:email, :password, :password_confirmation)
  end
  private :resource_params
end

继承自Devise注册控制器的注册控制器

# app/controllers/users/registrations_controller.rb

class Users::RegistrationsController < Devise::RegistrationsController
  def resource_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation, :current_password)
  end
  private :resource_params
end

设计路线以使用指定用户&#39;密码和注册控制器。

# config/routes.rb

devise_for :users, :controllers => {:registrations => "users/registrations", :passwords => "users/passwords"}

RegistrationsController中,我必须为用户添加属性:current_password才能编辑其个人资料。

我问的原因是没有strong_parameters我只会为attr_accessible指定:email, :password, :password_confirmation, :remember_me

非常感谢任何见解。

1 个答案:

答案 0 :(得分:2)

我相信你的方法是正确的。至少看起来其他人也在使用它。

https://gist.github.com/kazpsp/3350730/#comment-833882 https://gist.github.com/bluemont/e304e65e7e15d77d3cb9

我怀疑你已经遇到过这种情况,但我想我会回答为将来可能会发现这个问题的其他人。

编辑:由于问题(和我的答案)是专门针对添加的适当性:控制器级别的current_password与模型(不确定你甚至是后者如何),我的答案的原始部分仍然站立。然而,看起来Devise的最新版本(至少从3.0.0.rc开始)已经消除了覆盖resource_params的能力,有利于将该方法拆分为几个更具体的方法,如sign_up_params,create_account_params等更精细粒度控制。虽然我确实让我的应用程序单独覆盖了这些新方法,但似乎在设计README上描述并且引用here的“before_filter”(rails 4中的before_action)方法是首选方法,并且也可能更易于维护。