Module: DeviseCasAuthenticatable::SingleSignOut::DestroySession

Included in:
Devise::CasSessionsController
Defined in:
lib/devise_cas_authenticatable/single_sign_out.rb

Overview

Supports destroying sessions by ID for ActiveRecord and Redis session stores

Instance Method Summary collapse

Instance Method Details

#current_session_storeObject



27
28
29
30
31
32
33
# File 'lib/devise_cas_authenticatable/single_sign_out.rb', line 27

def current_session_store
  app = Rails.application.app
  begin
    app = (app.instance_variable_get(:@backend) || app.instance_variable_get(:@app))
  end until app.nil? or app.class == session_store_class
  app
end

#destroy_session_by_id(sid) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/devise_cas_authenticatable/single_sign_out.rb', line 35

def destroy_session_by_id(sid)
  logger.debug "Single Sign Out from session store: #{current_session_store.inspect}"

  if session_store_class.name =~ /ActiveRecord::SessionStore/
    session = session_store_class::Session.find_by_session_id(sid)
    session.destroy if session
    true
  elsif session_store_class.name =~ /Redis/
    current_session_store.instance_variable_get(:@pool).del(sid)
    true
  elsif session_store_class.name =~ /CacheStore/
    current_session_store.destroy_session({}, sid, {})
    true
  else
    logger.error "Cannot process logout request because this Rails application's session store is "+
          " #{current_session_store.name.inspect} and is not a support session store type for Single Sign-Out."
    false
  end
end

#session_store_classObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/devise_cas_authenticatable/single_sign_out.rb', line 10

def session_store_class
  @session_store_class ||=
    begin
      # Rails 3 & 4 session store
      if ::DeviseCasAuthenticatable::SingleSignOut.rails3_or_greater?
        Rails.configuration.session_store
        ::Rails.application.config.session_store
      else
        # => Rails 2
        ActionController::Base.session_store
      end
    rescue NameError => e
      # for older versions of Rails (prior to 2.3)
      ActionController::Base.session_options[:database_manager]
    end
end