module Devise::Models::RevocableSession
Public Instance Methods
activate_session(request)
click to toggle source
session
# File lib/devise_revocable_session/models/revocable_session.rb, line 18 def activate_session(request) new_session = revocable_sessions.new(attrs_for_login(request)) new_session.session_id = SecureRandom.hex(64) new_session.device_id = SecureRandom.uuid new_session.signed_in_ip = request.remote_ip new_session.save purge_old_sessions new_session end
deactivate_session!(session_id)
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 36 def deactivate_session!(session_id) devise_writer_wrapper do revocable_sessions.where(session_id: session_id).delete_all end end
devise_writer_wrapper() { || ... }
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 58 def devise_writer_wrapper role = Rails.application.config.active_record.writing_role || :writing ActiveRecord::Base.connected_to(role: role) do ActiveRecord::Base.connection_handler.while_preventing_writes(false) do yield end end end
exclusive_session(session_id)
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 28 def exclusive_session(session_id) revocable_sessions.where('session_id != ?', session_id).delete_all end
has_revocable_sessions?()
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 13 def has_revocable_sessions? true end
mark_last_seen!(device_id)
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 48 def mark_last_seen!(device_id) devise_writer_wrapper do login_record = revocable_sessions.find_by(device_id: device_id) #skip second to reduce database hit if (Time.now - (login_record.last_seen_at)) >= 60 login_record.update_column :last_seen_at, Time.now end end end
purge_old_sessions()
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 42 def purge_old_sessions devise_writer_wrapper do revocable_sessions.order(last_seen_at: :desc).offset(10).destroy_all end end
session_active?(device_id, session_id)
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 32 def session_active?(device_id, session_id) revocable_sessions.where(device_id: device_id, session_id: session_id).exists? end
Protected Instance Methods
attrs_for_login(request)
click to toggle source
# File lib/devise_revocable_session/models/revocable_session.rb, line 69 def attrs_for_login(request) t = Time.now { user_agent: request.user_agent, last_seen_ip: request.remote_ip, signed_in_at: t, last_seen_at: t } end