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

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

Instance Method Summary collapse

Instance Method Details

#find_first_by_auth_conditions(tainted_conditions, opts = {}) ⇒ Object



169
170
171
# File 'lib/devise/models/authenticatable.rb', line 169

def find_first_by_auth_conditions(tainted_conditions, opts={})
  to_adapter.find_first(devise_param_filter.filter(tainted_conditions).merge(opts))
end

#find_for_authentication(tainted_conditions) ⇒ Object

Find first record based on conditions given (ie by the sign in form). Overwrite to add customized conditions, create a join, or maybe use a namedscope to filter records while authenticating. Example:

def self.find_for_authentication(tainted_conditions)
  find_first_by_auth_conditions(tainted_conditions, active: true)
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.



165
166
167
# File 'lib/devise/models/authenticatable.rb', line 165

def find_for_authentication(tainted_conditions)
  find_first_by_auth_conditions(tainted_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.



174
175
176
# File 'lib/devise/models/authenticatable.rb', line 174

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.



179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/devise/models/authenticatable.rb', line 179

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)


147
148
149
150
# File 'lib/devise/models/authenticatable.rb', line 147

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

#params_authenticatable?(strategy) ⇒ Boolean

Returns:

  • (Boolean)


142
143
144
145
# File 'lib/devise/models/authenticatable.rb', line 142

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

#serialize_from_session(key, salt) ⇒ Object



137
138
139
140
# File 'lib/devise/models/authenticatable.rb', line 137

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

#serialize_into_session(record) ⇒ Object



133
134
135
# File 'lib/devise/models/authenticatable.rb', line 133

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