Module: Devise::Models::Authenticatable::ClassMethods

Defined in:
lib/devise/models/authenticatable.rb

Instance Method Summary collapse

Instance Method Details

#find_first_by_auth_conditions(conditions) ⇒ Object



221
222
223
# File 'lib/devise/models/authenticatable.rb', line 221

def find_first_by_auth_conditions(conditions)
  to_adapter.find_first devise_param_filter.filter(conditions)
end

#find_for_authentication(conditions) ⇒ Object

Find first record based on conditions given (ie by the sign in form). This method is always called during an authentication process but it may be wrapped as well. For instance, database authenticatable provides a ‘find_for_database_authentication` that wraps a call to this method. This allows you to customize both database authenticatable or the whole authenticate stack by customize `find_for_authentication.`

Overwrite to add customized conditions, create a join, or maybe use a namedscope to filter records while authenticating. Example:

def self.find_for_authentication(conditions={})
  conditions[:active] = true
  super
end

Finally, notice that Devise also queries for users in other scenarios besides authentication, for example when retrieving an user to send an e-mail for password reset. In such cases, find_for_authentication is not called.



217
218
219
# File 'lib/devise/models/authenticatable.rb', line 217

def find_for_authentication(conditions)
  find_first_by_auth_conditions(conditions)
end

#find_or_initialize_with_error_by(attribute, value, error = :invalid) ⇒ Object

Find an initialize a record setting an error if it can’t be found.



226
227
228
# File 'lib/devise/models/authenticatable.rb', line 226

def find_or_initialize_with_error_by(attribute, value, error=:invalid) #:nodoc:
  find_or_initialize_with_errors([attribute], { attribute => value }, error)
end

#find_or_initialize_with_errors(required_attributes, attributes, error = :invalid) ⇒ Object

Find an initialize a group of attributes based on a list of required attributes.



231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
# File 'lib/devise/models/authenticatable.rb', line 231

def find_or_initialize_with_errors(required_attributes, attributes, error=:invalid) #:nodoc:
  attributes = attributes.slice(*required_attributes)
  attributes.delete_if { |key, value| value.blank? }

  if attributes.size == required_attributes.size
    record = find_first_by_auth_conditions(attributes)
  end

  unless record
    record = new

    required_attributes.each do |key|
      value = attributes[key]
      record.send("#{key}=", value)
      record.errors.add(key, value.present? ? error : :blank)
    end
  end

  record
end

#http_authenticatable?(strategy) ⇒ Boolean

Returns:

  • (Boolean)


192
193
194
195
# File 'lib/devise/models/authenticatable.rb', line 192

def http_authenticatable?(strategy)
  http_authenticatable.is_a?(Array) ?
    http_authenticatable.include?(strategy) : http_authenticatable
end

#params_authenticatable?(strategy) ⇒ Boolean

Returns:

  • (Boolean)


187
188
189
190
# File 'lib/devise/models/authenticatable.rb', line 187

def params_authenticatable?(strategy)
  params_authenticatable.is_a?(Array) ?
    params_authenticatable.include?(strategy) : params_authenticatable
end

#serialize_from_session(key, salt) ⇒ Object



182
183
184
185
# File 'lib/devise/models/authenticatable.rb', line 182

def serialize_from_session(key, salt)
  record = to_adapter.get(key)
  record if record && record.authenticatable_salt == salt
end

#serialize_into_session(record) ⇒ Object



178
179
180
# File 'lib/devise/models/authenticatable.rb', line 178

def serialize_into_session(record)
  [record.to_key, record.authenticatable_salt]
end