Module: OmniAuth::Identity::Model

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

Overview

This module provides an includable 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)

Defined Under Namespace

Modules: ClassCreateApi, ClassMethods, InstancePersistedApi, InstanceSaveApi

Constant Summary collapse

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



26
27
28
29
30
31
32
# File 'lib/omniauth/identity/model.rb', line 26

def self.included(base)
  base.extend ClassMethods
  base.extend ClassCreateApi unless base.respond_to?(:create)
  im = base.instance_methods
  base.include InstanceSaveApi unless im.include?(:save)
  base.include InstancePersistedApi unless im.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.



138
139
140
141
142
143
144
# File 'lib/omniauth/identity/model.rb', line 138

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.



152
153
154
155
156
157
158
159
# File 'lib/omniauth/identity/model.rb', line 152

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 or false

This method is abstract.

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

Parameters:

  • password (String)

    The password to check.

Returns:

  • (self or false)

    Self if authenticated, false if not.

Raises:

  • (NotImplementedError)


114
115
116
# File 'lib/omniauth/identity/model.rb', line 114

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.



170
171
172
173
174
175
176
177
178
# File 'lib/omniauth/identity/model.rb', line 170

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.



122
123
124
125
126
127
128
129
130
# File 'lib/omniauth/identity/model.rb', line 122

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

    id.to_s
  else
    raise NotImplementedError
  end
end