diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 0b994496dc0..0f948222982 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -560,4 +560,16 @@ module ApplicationHelper
end
end
end
+
+ def authentication_data
+ return @authentication_data if defined?(@authentication_data)
+
+ @authentication_data = begin
+ value = cookies[:authentication_data]
+ if value
+ cookies.delete(:authentication_data, path: Discourse.base_path("/"))
+ end
+ current_user ? nil : value
+ end
+ end
end
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index 165ece79e1e..796a7be265d 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -60,8 +60,8 @@
<%= tag.meta id: 'data-discourse-setup', data: client_side_setup_data %>
- <%- if !current_user && (data = cookies.delete(:authentication_data, path: Discourse.base_path("/"))) %>
-
+ <%- if authentication_data %>
+
<%- end %>
diff --git a/spec/requests/application_controller_spec.rb b/spec/requests/application_controller_spec.rb
index 5e82551fc2b..1ac69118a79 100644
--- a/spec/requests/application_controller_spec.rb
+++ b/spec/requests/application_controller_spec.rb
@@ -104,11 +104,21 @@ RSpec.describe ApplicationController do
end
it 'contains authentication data when cookies exist' do
- COOKIE_DATA = "someauthenticationdata"
- cookies['authentication_data'] = COOKIE_DATA
+ cookie_data = "someauthenticationdata"
+ cookies['authentication_data'] = cookie_data
get '/login'
expect(response.status).to eq(200)
- expect(response.body).to include("data-authentication-data=\"#{COOKIE_DATA }\"")
+ expect(response.body).to include("data-authentication-data=\"#{cookie_data}\"")
+ expect(response.headers["Set-Cookie"]).to include("authentication_data=;") # Delete cookie
+ end
+
+ it 'deletes authentication data cookie even if already authenticated' do
+ sign_in(Fabricate(:user))
+ cookies['authentication_data'] = "someauthenticationdata"
+ get '/'
+ expect(response.status).to eq(200)
+ expect(response.body).not_to include("data-authentication-data=")
+ expect(response.headers["Set-Cookie"]).to include("authentication_data=;") # Delete cookie
end
end