Ruby on rails Rails-更新操作忽略验证
我有一个应用程序,它有用于创建帐户的验证密码。但是,当用户更新密码时,它会忽略所有验证 用户控制器Ruby on rails Rails-更新操作忽略验证,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我有一个应用程序,它有用于创建帐户的验证密码。但是,当用户更新密码时,它会忽略所有验证 用户控制器 class User < ActiveRecord::Base attr_accessible :email, :password, :password_confirmation, :name, attr_accessor :password before_save :encrypt_password before_save { |u
class User < ActiveRecord::Base
attr_accessible :email, :password, :password_confirmation, :name,
attr_accessor :password
before_save :encrypt_password
before_save { |user| user.email = email.downcase }
before_save { |user| user.name = name.downcase }
before_create { generate_token(:auth_token) }
before_create { generate_token(:email_token) }
VALID_PASSWORD_REGEX = /^(?=.*[a-zA-Z])(?=.*[0-9]).{6,}$/
validates_confirmation_of :password
validates :password, :on => :create, presence: true, format: { with: VALID_PASSWORD_REGEX }
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
validates :name, presence: true, format: { with: VALID_NAME_REGEX }, uniqueness: { case_sensitive: false }, length: { minimum: 4 }
用:
:on=>[:创建,:更新]
试试看。但这意味着,在保存用户时,您需要输入密码并进行确认,因为它是以加密方式存储的,因此可能无法在用户实例中调用。(否则不安全。)尝试使用::on=>[:创建,:更新]
。但这意味着,在保存用户时,您需要输入密码并进行确认,因为它是以加密方式存储的,因此可能无法在用户实例中调用。(否则就不安全了。)试试这样的方法:
validates :password, :presence => {:on => :create}, :confirmation => true, format: { with: VALID_PASSWORD_REGEX }
我认为您编写它的方式只会在创建时执行整个操作,并完全排除更新尝试以下操作:
validates :password, :presence => {:on => :create}, :confirmation => true, format: { with: VALID_PASSWORD_REGEX }
我认为您编写它的方式只是在创建时执行整个操作,并完全排除更新假设加密密码属性名为
encrypted\u password
仅在需要密码设置时进行验证
validates :password, format: { with: VALID_PASSWORD_REGEX }, if: :password_required?
def password_required?
encrypted_password.blank? || !password.blank?
end
假设加密密码属性名为
encrypted\u password
仅在需要密码设置时进行验证
validates :password, format: { with: VALID_PASSWORD_REGEX }, if: :password_required?
def password_required?
encrypted_password.blank? || !password.blank?
end
该死的,我不能那样做。因为我有一个电子邮件激活令牌,当用户检查他们的电子邮件时激活,然后用户被保存。在那个页面上有密码和密码确认会很烦人。你们应该在密码上设置条件验证,以防密码并没有被更改。添加一个自定义验证器,它可以处理您需要的所有逻辑。该死的,我不能这样做。因为我有一个电子邮件激活令牌,当用户检查他们的电子邮件时激活,然后用户被保存。在那个页面上有密码和密码确认会很烦人。你们应该在密码上设置条件验证,以防密码并没有被更改。添加一个自定义验证器,它可以处理您需要的所有逻辑。是的,我尝试过,但当我创建一个用户并更改用户电子邮件激活令牌(这是注册的一部分)时,请致电@user.save!它告诉我验证是错误的(是的,我试过了,但当我创建一个用户并更改用户电子邮件激活令牌(这是注册的一部分)并调用@user.save时,它告诉我验证错误。:(它在保存之前有:加密密码,并且密码更改为仅2个字母时(这将破坏验证)它仍然被加密为lol so。问题仍然存在:(它在保存之前有:encrypt\u密码,而且当密码更改为仅2个字母时(这将破坏验证),它仍然被加密为lol so。问题仍然存在:(