diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2020-07-07 15:26:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-07 15:26:31 +0200 |
commit | 844870273ffb1a663c768494c265caef6768ff83 (patch) | |
tree | 8edd28a8130e478fd9d396a075e9ca62e5f47be3 /app/controllers/auth | |
parent | 1c903c7ad64221ea4102404e1efbc5d1ac3cc076 (diff) |
Fix other sessions not being logged out on password change (#14252)
While OAuth tokens were immediately revoked, accessing the home controller immediately generated new OAuth tokens and "revived" the session due to a combination of using remember_me tokens and overwriting the `authenticate_user!` method
Diffstat (limited to 'app/controllers/auth')
-rw-r--r-- | app/controllers/auth/passwords_controller.rb | 5 | ||||
-rw-r--r-- | app/controllers/auth/registrations_controller.rb | 8 |
2 files changed, 11 insertions, 2 deletions
diff --git a/app/controllers/auth/passwords_controller.rb b/app/controllers/auth/passwords_controller.rb index b98bcecd0..5db2668f7 100644 --- a/app/controllers/auth/passwords_controller.rb +++ b/app/controllers/auth/passwords_controller.rb @@ -8,7 +8,10 @@ class Auth::PasswordsController < Devise::PasswordsController def update super do |resource| - resource.session_activations.destroy_all if resource.errors.empty? + if resource.errors.empty? + resource.session_activations.destroy_all + resource.forget_me! + end end end diff --git a/app/controllers/auth/registrations_controller.rb b/app/controllers/auth/registrations_controller.rb index 78feb1631..d31966248 100644 --- a/app/controllers/auth/registrations_controller.rb +++ b/app/controllers/auth/registrations_controller.rb @@ -1,6 +1,8 @@ # frozen_string_literal: true class Auth::RegistrationsController < Devise::RegistrationsController + include Devise::Controllers::Rememberable + layout :determine_layout before_action :set_invite, only: [:new, :create] @@ -24,7 +26,11 @@ class Auth::RegistrationsController < Devise::RegistrationsController def update super do |resource| - resource.clear_other_sessions(current_session.session_id) if resource.saved_change_to_encrypted_password? + if resource.saved_change_to_encrypted_password? + resource.clear_other_sessions(current_session.session_id) + resource.forget_me! + remember_me(resource) + end end end |