Module: OmniAuth::Identity::Model

Included in:
OmniAuth::Identity::Models::ActiveRecord
Defined in:
lib/omniauth/identity/model.rb

Overview

This module provides an include-able interface for implementing the
necessary API for OmniAuth Identity to properly locate identities
and provide all necessary information.

All methods marked as abstract must be implemented in the
including class for things to work properly.

Singleton API

  • locate(key)
  • create(*args) - Deprecated in v3.0.5; Will be removed in v4.0

Instance API

  • save
  • persisted?
  • authenticate(password)

Examples:

Including the Model

class User
  include OmniAuth::Identity::Model
  # Implement required methods...
end

Defined Under Namespace

Modules: ClassCreateApi, ClassMethods, InstancePersistedApi, InstanceSaveApi

Constant Summary collapse

SCHEMA_ATTRIBUTES =

Standard OmniAuth schema attributes that may be stored in the model.

Returns:

  • (Array<String>)

    List of attribute names.

%w[name email nickname first_name last_name location description image phone].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#SCHEMA_ATTRIBUTESArray<String> (readonly)

Standard OmniAuth schema attributes that may be stored in the model.

Returns:

  • (Array<String>)

    List of attribute names.



32
# File 'lib/omniauth/identity/model.rb', line 32

SCHEMA_ATTRIBUTES = %w[name email nickname first_name last_name location description image phone].freeze

Class Method Details

.included(base) ⇒ void

This method returns an undefined value.

Called when this module is included in a model class.

Extends the base class with ClassMethods and includes necessary APIs
if they are not already defined.

Parameters:

  • base (Class)

    the model class including this module



42
43
44
45
46
47
48
# File 'lib/omniauth/identity/model.rb', line 42

def included(base)
  base.extend(ClassMethods)
  base.extend(ClassCreateApi) unless base.respond_to?(:create)
  i_methods = base.instance_methods
  base.include(InstanceSaveApi) unless i_methods.include?(:save)
  base.include(InstancePersistedApi) unless i_methods.include?(:persisted?)
end

Instance Method Details

#auth_keyString

Used to retrieve the user-supplied authentication key (e.g. a
username or email). Determined using the class method of the same name,
defaults to :email.

Returns:

  • (String)

    An identifying string that will be entered by
    users upon sign in.



162
163
164
165
166
167
168
# File 'lib/omniauth/identity/model.rb', line 162

def auth_key
  if respond_to?(self.class.auth_key.to_sym)
    send(self.class.auth_key)
  else
    raise NotImplementedError
  end
end

#auth_key=(value) ⇒ Object

Used to set the user-supplied authentication key (e.g. a
username or email. Determined using the .auth_key class
method.

Parameters:

  • value (String)

    The value to which the auth key should be
    set.



176
177
178
179
180
181
182
183
# File 'lib/omniauth/identity/model.rb', line 176

def auth_key=(value)
  auth_key_setter = "#{self.class.auth_key}=".to_sym
  if respond_to?(auth_key_setter)
    send(auth_key_setter, value)
  else
    raise NotImplementedError
  end
end

#authenticate(_password) ⇒ self, false

This method is abstract.

Subclasses must implement this method.

Returns self if the provided password is correct, false
otherwise.

Parameters:

  • _password (String)

    The password to check.

Returns:

  • (self, false)

    Self if authenticated, false if not.

Raises:

  • (NotImplementedError)


138
139
140
# File 'lib/omniauth/identity/model.rb', line 138

def authenticate(_password)
  raise NotImplementedError
end

#infoHash

A hash of as much of the standard OmniAuth schema as is stored
in this particular model. By default, this will call instance
methods for each of the attributes it needs in turn, ignoring
any for which #respond_to? is false.

If first_name, nickname, and/or last_name is provided but
name is not, it will be automatically calculated.

Returns:

  • (Hash)

    A string-keyed hash of user information.



194
195
196
197
198
199
200
201
202
# File 'lib/omniauth/identity/model.rb', line 194

def info
  info = {}
  SCHEMA_ATTRIBUTES.each_with_object(info) do |attribute, hash|
    hash[attribute] = send(attribute) if respond_to?(attribute)
  end
  info["name"] ||= [info["first_name"], info["last_name"]].join(" ").strip if info["first_name"] || info["last_name"]
  info["name"] ||= info["nickname"]
  info
end

#uidString

An identifying string that must be globally unique to the
application. Defaults to stringifying the id method.

Returns:

  • (String)

    An identifier string unique to this identity.



146
147
148
149
150
151
152
153
154
# File 'lib/omniauth/identity/model.rb', line 146

def uid
  if respond_to?(:id)
    return if id.nil?

    id.to_s
  else
    raise NotImplementedError
  end
end