1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

has_secure_password shouldn't validate password_digest. It should also take options to turn validations off.

This commit is contained in:
Erich Menge 2012-05-08 17:54:25 -05:00
parent ef9dd27223
commit 0e1e527654

View file

@ -6,8 +6,9 @@ module ActiveModel
# Adds methods to set and authenticate against a BCrypt password.
# This mechanism requires you to have a password_digest attribute.
#
# Validations for presence of password, confirmation of password (using
# Validations for presence of password on create, confirmation of password (using
# a "password_confirmation" attribute) are automatically added.
# If you wish to turn off validations, pass 'validations: false' as an argument.
# You can add more validations by hand if need be.
#
# You need to add bcrypt-ruby (~> 3.0.0) to Gemfile to use has_secure_password:
@ -31,16 +32,20 @@ module ActiveModel
# user.authenticate("mUc3m00RsqyRe") # => user
# User.find_by_name("david").try(:authenticate, "notright") # => false
# User.find_by_name("david").try(:authenticate, "mUc3m00RsqyRe") # => user
def has_secure_password
def has_secure_password(options = {})
# Load bcrypt-ruby only when has_secure_password is used.
# This is to avoid ActiveModel (and by extension the entire framework) being dependent on a binary library.
gem 'bcrypt-ruby', '~> 3.0.0'
require 'bcrypt'
attr_reader :password
validates_confirmation_of :password
validates_presence_of :password_digest
if options.fetch(:validations, true)
validates_confirmation_of :password
validates_presence_of :password, :on => :create
end
before_create { raise "Password digest missing on new record" if password_digest.blank? }
include InstanceMethodsOnActivation