diff --git a/lib/auth/default_current_user_provider.rb b/lib/auth/default_current_user_provider.rb index e7b0a256d48..4a23f0b1c48 100644 --- a/lib/auth/default_current_user_provider.rb +++ b/lib/auth/default_current_user_provider.rb @@ -338,6 +338,7 @@ class Auth::DefaultCurrentUserProvider user.logged_out elsif user && @user_token @user_token.destroy + DiscourseEvent.trigger(:user_logged_out, user) end cookie_jar.delete("authentication_data") diff --git a/spec/lib/auth/default_current_user_provider_spec.rb b/spec/lib/auth/default_current_user_provider_spec.rb index e06a711814e..09516bf36da 100644 --- a/spec/lib/auth/default_current_user_provider_spec.rb +++ b/spec/lib/auth/default_current_user_provider_spec.rb @@ -736,13 +736,14 @@ RSpec.describe Auth::DefaultCurrentUserProvider do end describe "#log_off_user" do - it "should work when the current user was cached by a different provider instance" do + let(:env) do user_provider = provider("/") user_provider.log_on_user(user, {}, user_provider.cookie_jar) cookie = CGI.escape(user_provider.cookie_jar["_t"]) - env = - create_request_env(path: "/").merge({ :method => "GET", "HTTP_COOKIE" => "_t=#{cookie}" }) + create_request_env(path: "/").merge({ :method => "GET", "HTTP_COOKIE" => "_t=#{cookie}" }) + end + it "should work when the current user was cached by a different provider instance" do user_provider = TestProvider.new(env) expect(user_provider.current_user).to eq(user) expect(UserAuthToken.find_by(user_id: user.id)).to be_present @@ -751,6 +752,18 @@ RSpec.describe Auth::DefaultCurrentUserProvider do user_provider.log_off_user({}, user_provider.cookie_jar) expect(UserAuthToken.find_by(user_id: user.id)).to be_nil end + + it "should trigger user_logged_out event" do + event_triggered_user = nil + event_handler = Proc.new { |user| event_triggered_user = user.id } + DiscourseEvent.on(:user_logged_out, &event_handler) + + user_provider = TestProvider.new(env) + user_provider.log_off_user({}, user_provider.cookie_jar) + expect(event_triggered_user).to eq(user.id) + + DiscourseEvent.off(:user_logged_out, &event_handler) + end end describe "first admin user" do