From a3be9a9b04b99acd291b8c36066b87b28cda31ad Mon Sep 17 00:00:00 2001 From: John-Mainsys Date: Sun, 16 Nov 2014 18:27:59 +0000 Subject: [PATCH 1/4] fixed a problem with inserting a new record where it was expecting user_id, even if the model wasn't User. It now creates via the association, which is always 'logins', so we use logins.create & etc --- lib/devise/models/login_tracker.rb | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/lib/devise/models/login_tracker.rb b/lib/devise/models/login_tracker.rb index 0ed5e1b..8d60db0 100644 --- a/lib/devise/models/login_tracker.rb +++ b/lib/devise/models/login_tracker.rb @@ -11,28 +11,20 @@ module LoginTracker # to login # @return [UserLogin] def mark_login!(request) - login_class.create(attrs_for_login(request)) + logins.create( ip_address: request.remote_ip, + user_agent: request.user_agent, + signed_in_at: Time.now + ) end # Marks the time when user has logged out on given login record ID. # # @param [Fixnum, String] login_record_id ID of login record. def mark_logout!(login_record_id) - login_record = login_class.find(login_record_id) + login_record = logins.find(login_record_id) login_record.update_column :signed_out_at, Time.now end - protected - - def attrs_for_login(request) - { user_id: id, ip_address: request.remote_ip, - user_agent: request.user_agent, - signed_in_at: Time.now } - end - - def login_class - "#{self.class.name}Login".safe_constantize - end end end From f31ded0c90e755d550a1fa441d5ca04015e84a30 Mon Sep 17 00:00:00 2001 From: John Small Date: Mon, 17 Nov 2014 07:48:56 +0000 Subject: [PATCH 2/4] fix a bug where the default scope would get set to another model if devise is workign with more than one model. This resulted in an error because warden.session[etc] would try to get the session hash for the default model, which might not be the one you want --- lib/devise/hooks/login_tracker.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/devise/hooks/login_tracker.rb b/lib/devise/hooks/login_tracker.rb index b44d604..1f21649 100644 --- a/lib/devise/hooks/login_tracker.rb +++ b/lib/devise/hooks/login_tracker.rb @@ -4,14 +4,14 @@ if record.respond_to?(:mark_login!) login_record = record.mark_login!(warden.request) scope = opts[:scope] - warden.session["#{scope}.login_id"] = login_record.id + warden.session(scope)['login_id'] = login_record.id end end Warden::Manager.before_logout do |record, warden, opts| if record.respond_to?(:mark_logout!) scope = opts[:scope] - login_record_id = warden.session["#{scope}.login_id"] + login_record_id = warden.session(scope)['login_id'] record.mark_logout!(login_record_id) if login_record_id end end From 21b71048a1c9363f23db9d6444d1a52d20edcd1d Mon Sep 17 00:00:00 2001 From: John-Mainsys Date: Mon, 29 Dec 2014 09:21:50 +0000 Subject: [PATCH 3/4] added *.swp to .gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index d87d4be..ed19026 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,5 @@ spec/reports test/tmp test/version_tmp tmp +*.swp + From 37056275d9b7f3b1c2bc5c7c0e9408a5edb9e922 Mon Sep 17 00:00:00 2001 From: John-Mainsys Date: Fri, 2 Jan 2015 05:20:12 +0000 Subject: [PATCH 4/4] locked to postgresql because we now use t.inet in the migration --- lib/generators/devise_login_tracker/templates/migration.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/generators/devise_login_tracker/templates/migration.rb b/lib/generators/devise_login_tracker/templates/migration.rb index 17e0759..6220bc1 100644 --- a/lib/generators/devise_login_tracker/templates/migration.rb +++ b/lib/generators/devise_login_tracker/templates/migration.rb @@ -3,8 +3,8 @@ class DeviseCreate<%= table_name.camelize.singularize %>Logins < ActiveRecord::M def up create_table :<%= table_name.singularize %>_logins do |t| t.integer :<%= table_name.classify.foreign_key %> - t.string :ip_address - t.string :user_agent + t.inet :ip_address + t.string :user_agent t.datetime :signed_in_at t.datetime :signed_out_at end