Sha256: 14db18509d97c469a2326200e29779c2bbe1b8a525c88ba28bfa27e155943f82

Contents?: true

Size: 1.69 KB

Versions: 12

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

require 'devise/hooks/trackable'

module Devise
  module Models
    # Track information about your user sign in. It tracks the following columns:
    #
    # * sign_in_count      - Increased every time a sign in is made (by form, openid, oauth)
    # * current_sign_in_at - A timestamp updated when the user signs in
    # * last_sign_in_at    - Holds the timestamp of the previous sign in
    # * current_sign_in_ip - The remote ip updated when the user sign in
    # * last_sign_in_ip    - Holds the remote ip of the previous sign in
    #
    module Trackable
      def self.required_fields(klass)
        [:current_sign_in_at, :current_sign_in_ip, :last_sign_in_at, :last_sign_in_ip, :sign_in_count]
      end

      def update_tracked_fields(request)
        old_current, new_current = self.current_sign_in_at, Time.now.utc
        self.last_sign_in_at     = old_current || new_current
        self.current_sign_in_at  = new_current

        old_current, new_current = self.current_sign_in_ip, extract_ip_from(request)
        self.last_sign_in_ip     = old_current || new_current
        self.current_sign_in_ip  = new_current

        self.sign_in_count ||= 0
        self.sign_in_count += 1
      end

      def update_tracked_fields!(request)
        # We have to check if the user is already persisted before running
        # `save` here because invalid users can be saved if we don't.
        # See https://github.com/heartcombo/devise/issues/4673 for more details.
        return if new_record?

        update_tracked_fields(request)
        save(validate: false)
      end

      protected

      def extract_ip_from(request)
        request.remote_ip
      end

    end
  end
end

Version data entries

12 entries across 12 versions & 3 rubygems

Version Path
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/devise-4.9.4/lib/devise/models/trackable.rb
devise-4.9.4 lib/devise/models/trackable.rb
devise-4.9.3 lib/devise/models/trackable.rb
devise-4.9.2 lib/devise/models/trackable.rb
devise-4.9.1 lib/devise/models/trackable.rb
devise-4.9.0 lib/devise/models/trackable.rb
devise-4.8.1 lib/devise/models/trackable.rb
date_n_time_picker_activeadmin-0.1.2 vendor/bundle/ruby/2.6.0/gems/devise-4.8.0/lib/devise/models/trackable.rb
date_n_time_picker_activeadmin-0.1.1 vendor/bundle/ruby/2.6.0/gems/devise-4.8.0/lib/devise/models/trackable.rb
devise-4.8.0 lib/devise/models/trackable.rb
devise-4.7.3 lib/devise/models/trackable.rb
devise-4.7.2 lib/devise/models/trackable.rb