mas*_*ugo 5 ruby-on-rails devise
我在轨道4.2.1和设计3.4.1.我基本上想要同时做两件事:
和
我设法让他们分开工作.但是第一个问题的解决方案1似乎是,我担心,与第二个问题的唯一官方解决方案不兼容,因为对于后者,我需要覆盖注册控制器.
因此,我尝试在注册控制器而不是应用程序中执行解决方案1作业:
class Users::RegistrationsController < Devise::RegistrationsController
before_filter :configure_account_update_params, only: [:update]
protected
def configure_account_update_params
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:name, :password, :password_confirmation, :current_password) }
end
def update_resource(resource, params)
resource.update_without_password(params)
end
end
Run Code Online (Sandbox Code Playgroud)
这种方式只有在密码被完全过滤掉时才添加名称等属性.对于这样一个简单的目标,我不确定我是否应该像解决方案2和3那样开始大量定制..我错过了什么?
将此添加到registrations_controller:
def update_resource(resource, params)
resource.update_without_password(params)
end
Run Code Online (Sandbox Code Playgroud)
并覆盖用户模型或使用Devise的模型的update_withour_password方法:
def update_without_password(params, *options)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
result = update_attributes(params, *options)
clean_up_passwords
result
end
Run Code Online (Sandbox Code Playgroud)
在深入研究设计代码后,我发现update_without_password故意删除了:password参数:password_confirmation。出于安全原因,默认情况下会这样做。
因此(可能有风险)的解决方案是按原样覆盖我的资源模型中的update_without_password但不删除密码*参数
| 归档时间: |
|
| 查看次数: |
3688 次 |
| 最近记录: |