Class: OmniAuth::Identity::SecurePassword::InstanceMethodsOnActivation

Inherits:
Module
  • Object
show all
Defined in:
lib/omniauth/identity/secure_password.rb

Instance Method Summary collapse

Constructor Details

#initialize(attribute) ⇒ InstanceMethodsOnActivation

Returns a new instance of InstanceMethodsOnActivation.



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/omniauth/identity/secure_password.rb', line 125

def initialize(attribute)
  attr_reader(attribute)

  define_method(:"#{attribute}=") do |unencrypted_password|
    if unencrypted_password.nil?
      public_send(:"#{attribute}_digest=", nil)
    elsif !unencrypted_password.empty?
      instance_variable_set(:"@#{attribute}", unencrypted_password)
      cost = if defined?(ActiveModel::SecurePassword)
        ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost
      else
        BCrypt::Engine.cost
      end
      public_send(:"#{attribute}_digest=", BCrypt::Password.create(unencrypted_password, cost: cost))
    end
  end

  define_method(:"#{attribute}_confirmation=") do |unencrypted_password|
    instance_variable_set(:"@#{attribute}_confirmation", unencrypted_password)
  end

  # Returns +self+ if the password is correct, otherwise +false+.
  #
  #   class User < ActiveRecord::Base
  #     has_secure_password validations: false
  #   end
  #
  #   user = User.new(name: 'david', password: 'mUc3m00RsqyRe')
  #   user.save
  #   user.authenticate_password('notright')      # => false
  #   user.authenticate_password('mUc3m00RsqyRe') # => user
  define_method(:"authenticate_#{attribute}") do |unencrypted_password|
    attribute_digest = public_send(:"#{attribute}_digest")
    BCrypt::Password.new(attribute_digest).is_password?(unencrypted_password) && self
  end

  alias_method(:authenticate, :authenticate_password) if attribute == :password
end