module Authlogic::ActsAsAuthentic::SessionMaintenance::Methods

This module, as one of the `acts_as_authentic_modules`, is only included into an ActiveRecord model if that model calls `acts_as_authentic`.

Public Class Methods

included(klass) click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 88
def self.included(klass)
  klass.class_eval do
    before_save :get_session_information, if: :update_sessions?
    before_save :maintain_sessions, if: :update_sessions?
  end
end

Public Instance Methods

save_without_session_maintenance(**options) click to toggle source

Save the record and skip session maintenance all together.

# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 96
def save_without_session_maintenance(**options)
  self.skip_session_maintenance = true
  result = save(**options)
  self.skip_session_maintenance = false
  result
end

Private Instance Methods

create_session() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 145
def create_session
  # We only want to automatically login into the first session, since
  # this is the main session. The other sessions are sessions that
  # need to be created after logging into the main session.
  session_id = session_ids.first
  session_class.create(*[self, self, session_id].compact)

  true
end
get_session_information() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 126
def get_session_information
  # Need to determine if we are completely logged out, or logged in as
  # another user.
  @_sessions = []

  session_ids.each do |session_id|
    session = session_class.find(session_id, self)
    @_sessions << session if session&.record
  end
end
log_in_after_create?() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 174
def log_in_after_create?
  new_record? && self.class.log_in_after_create
end
log_in_after_password_change?() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 178
def log_in_after_password_change?
  persisted? &&
    will_save_change_to_persistence_token? &&
    self.class.log_in_after_password_change
end
maintain_session?() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 122
def maintain_session?
  log_in_after_create? || log_in_after_password_change?
end
maintain_sessions() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 137
def maintain_sessions
  if @_sessions.empty?
    create_session
  else
    update_sessions
  end
end
session_class() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 170
def session_class
  self.class.session_class
end
session_ids() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 166
def session_ids
  self.class.session_ids
end
skip_session_maintenance() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 109
def skip_session_maintenance
  @skip_session_maintenance ||= false
end
skip_session_maintenance=(value) click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 105
def skip_session_maintenance=(value)
  @skip_session_maintenance = value
end
update_sessions() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 155
def update_sessions
  # We found sessions above, let's update them with the new info
  @_sessions.each do |stale_session|
    next if stale_session.record != self
    stale_session.unauthorized_record = self
    stale_session.save
  end

  true
end
update_sessions?() click to toggle source
# File lib/authlogic/acts_as_authentic/session_maintenance.rb, line 113
def update_sessions?
  !skip_session_maintenance &&
    session_class &&
    session_class.activated? &&
    maintain_session? &&
    !session_ids.blank? &&
    will_save_change_to_persistence_token?
end