Devise + Switch User : How to avoid update in trackable devise columns for a switch user?

119 views
Skip to first unread message

Ankur Kumar

unread,
May 2, 2014, 11:13:21 PM5/2/14
to rubyonra...@googlegroups.com

I am using switch_user rails gem to login as any other devise user from an admin account. When I use switch_user for an account, the devise session updates all the devise trackable attributes for that user such as:


t.integer  "sign_in_count",                 
t.datetime "current_sign_in_at"
t.datetime "last_sign_in_at"
t.string   "current_sign_in_ip"
t.string   "last_sign_in_ip"

which I don't want to happen. These updates should happen only when an end user actually logs in and not for an admin account through switch_user.

How can I achieve this?

Thanks.

--
Regards,
Ankur

Lauree Roberts

unread,
May 3, 2014, 1:36:10 AM5/3/14
to rubyonra...@googlegroups.com

There is a way provided by devise gem to skip the Trackable fields updates for a specific request. Devise uses a condition as :

if record.respond_to?(:update_tracked_fields!) && warden.authenticated?(options[:scope]) &&
  !warden.request.env["devise.skip_trackable"]

Above condition can be found at https://github.com/plataformatec/devise/blob/master/lib/devise/hooks/trackable.rb#L6

In whichever request you want to skip the Trackable fields updates you just need to set an variable devise.skip_trackable from environment as :

prepend_before_filter { env["devise.skip_trackable"] = true }
This will skip the updating of following columns:
  1. sign_in_count
  2. current_sign_in_at
  3. last_sign_in_at
  4. current_sign_in_ip
  5. last_sign_in_ip

Please refer https://github.com/plataformatec/devise/issues/953#issue-717719 for more details.

Reply all
Reply to author
Forward
0 new messages