【问题标题】:Rails Devise - Validate password field when using update_without_passwordRails Devise - 使用 update_without_password 时验证密码字段
【发布时间】:2015-05-12 07:50:54
【问题描述】:

我按照设计 wiki 上的说明允许用户在不提供密码的情况下编辑他们的帐户:

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password

我的表单中仍有密码和密码确认字段。我只是不希望用户必须输入他们当前的密码。使用 update_without_password 函数时,如何仍然强制验证这两个字段?

def configure_account_update_params
  devise_parameter_sanitizer.for(:account_update) << [:first_name, :last_name, :email, :locale, :time_zone, :phone, :password, :password_confirmation]
end

def update_resource(resource, params)
  resource.update_without_password(params)
end

【问题讨论】:

  • 只是一个提示 - 让用户在不提供当前密码的情况下更改密码是不好的做法。例如。我做了一个完全不同的动作,用不同的视图来改变 pswd,current_pswd 也需要在那里。这样,您可以避免用户打开他/她的帐户并离开计算机并且某人可以通过更改密码来控制用户帐户的用例。但是ofc-我不熟悉您的应用程序,也许它与您的情况无关:)

标签: ruby-on-rails devise


【解决方案1】:

在使用 update_without_password 函数时,如何仍然强制验证这两个字段?

我认为你应该做的是创建一个custom validation method 并仅将其调用为更新方法。。您可以通过执行以下操作来实现它:

#user.rb

class User < ActiveRecord::Base
  validate :validate_password_fields, on: :update

  def validate_password_fields
    errors.add(:base, "Please enter correct values") if password.blank? || password_confirmation.blank? || (password != password_confirmation)
  end
end

【讨论】:

  • 我喜欢这个主意!我添加了这个,现在总是显示错误消息“请输入正确的值”,所以它似乎不起作用。
  • @MollyHarper 总是显示是什么意思?新用户注册时会显示吗?您是否使用 on: 选项,该选项仅在用户更新他/她的帐户时才会启动该方法
猜你喜欢
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
相关资源
最近更新 更多