diff --git a/app/assets/javascripts/app/views/profile/devices.jst.eco b/app/assets/javascripts/app/views/profile/devices.jst.eco
index c99ad563d..347b3ffc5 100644
--- a/app/assets/javascripts/app/views/profile/devices.jst.eco
+++ b/app/assets/javascripts/app/views/profile/devices.jst.eco
@@ -21,7 +21,7 @@
<%= device.name %> |
<%= device.location %> |
<%- @humanTime(device.updated_at) %> |
- |
+ disabled<% end %>> |
<% end %>
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index d9ef7d6a6..7785c8063 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -98,6 +98,9 @@ class ApplicationController < ActionController::Base
# check user device
def check_user_device
+ # return if we are in switch to user mode
+ return if session[:switched_from_user_id]
+
# only if user_id exists
return if !session[:user_id]
@@ -108,11 +111,14 @@ class ApplicationController < ActionController::Base
return if session[:check_user_device_at] && session[:check_user_device_at] > Time.zone.now - 5.minutes
session[:check_user_device_at] = Time.zone.now
- UserDevice.add(
+ user_device = UserDevice.add(
session[:user_agent],
session[:remote_id],
session[:user_id],
)
+ if user_device.id != session[:check_user_device_id]
+ session[:check_user_device_id] = user_device.id
+ end
end
def authentication_check_only(auth_param)
diff --git a/app/controllers/user_devices_controller.rb b/app/controllers/user_devices_controller.rb
index 53870dbda..e80db5115 100644
--- a/app/controllers/user_devices_controller.rb
+++ b/app/controllers/user_devices_controller.rb
@@ -14,13 +14,29 @@ class UserDevicesController < ApplicationController
attributes.delete('created_at')
attributes.delete('device_details')
attributes.delete('location_details')
+
+ if session[:check_user_device_id] == device.id
+ attributes['current'] = true
+ end
devices_full.push attributes
}
model_index_render_result(devices_full)
end
def destroy
- UserDevice.where(user_id: current_user.id, id: params[:id]).destroy_all
+ # find device
+ user_device = UserDevice.find_by(user_id: current_user.id, id: params[:id])
+
+ # delete device and session's
+ if user_device
+ SessionHelper.list.each {|session|
+ next if !session.data['user_id']
+ next if !session.data['check_user_device_id']
+ next if session.data['check_user_device_id'] != user_device.id
+ SessionHelper.destroy( session.id )
+ }
+ user_device.destroy
+ end
render json: {}, status: :ok
end
diff --git a/app/models/user_device.rb b/app/models/user_device.rb
index 0c6b2d16d..1e9b5649a 100644
--- a/app/models/user_device.rb
+++ b/app/models/user_device.rb
@@ -9,7 +9,7 @@ class UserDevice < ApplicationModel
store device for user
- UserDevice.add(
+ user_device = UserDevice.add(
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.107 Safari/537.36',
'172.0.0.1',
user.id,