diff --git a/app/assets/javascripts/authentication-complete.js.no-module.es6 b/app/assets/javascripts/authentication-complete.js.no-module.es6 deleted file mode 100644 index be55e6d838..0000000000 --- a/app/assets/javascripts/authentication-complete.js.no-module.es6 +++ /dev/null @@ -1,17 +0,0 @@ -(function() { - const authenticationData = JSON.parse( - document.getElementById("data-authentication").dataset.authenticationData - ); - - Discourse.showingSignup = true; - require("discourse/routes/application").default.reopen({ - actions: { - didTransition: function() { - Ember.run.next(function() { - Discourse.authenticationComplete(authenticationData); - }); - return this._super(); - } - } - }); -})(); diff --git a/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 b/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 index 3e9d88d0e0..cecf831405 100644 --- a/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 +++ b/app/assets/javascripts/discourse/initializers/auth-complete.js.es6 @@ -1,15 +1,26 @@ export default { name: "auth-complete", after: "inject-objects", - initialize() { + initialize(container) { + let lastAuthResult; + if (window.location.search.indexOf("authComplete=true") !== -1) { - const lastAuthResult = localStorage.getItem("lastAuthResult"); + // Happens when a popup social login loses connection to the parent window + lastAuthResult = localStorage.getItem("lastAuthResult"); localStorage.removeItem("lastAuthResult"); - if (lastAuthResult) { + } else if (document.getElementById("data-authentication")) { + // Happens for full screen logins + lastAuthResult = document.getElementById("data-authentication").dataset + .authenticationData; + } + + if (lastAuthResult) { + const router = container.lookup("router:main"); + router.one("didTransition", () => { Ember.run.next(() => Discourse.authenticationComplete(JSON.parse(lastAuthResult)) ); - } + }); } } }; diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb index e6502658b3..fc109a741a 100644 --- a/app/views/layouts/application.html.erb +++ b/app/views/layouts/application.html.erb @@ -57,7 +57,6 @@ <%- if !current_user && cookies[:authentication_data] %> - <%= preload_script "authentication-complete" %> <%- end %> diff --git a/config/application.rb b/config/application.rb index 89c161bbfe..65233ef4d8 100644 --- a/config/application.rb +++ b/config/application.rb @@ -122,7 +122,6 @@ module Discourse google-tag-manager.js google-universal-analytics.js preload-application-data.js - authentication-complete.js print-page.js omniauth-complete.js activate-account.js diff --git a/test/javascripts/acceptance/auth-complete-test.js.es6 b/test/javascripts/acceptance/auth-complete-test.js.es6 new file mode 100644 index 0000000000..58a717bcc0 --- /dev/null +++ b/test/javascripts/acceptance/auth-complete-test.js.es6 @@ -0,0 +1,40 @@ +import { acceptance } from "helpers/qunit-helpers"; +acceptance("Auth Complete", { + beforeEach() { + const node = document.createElement("meta"); + node.dataset.authenticationData = JSON.stringify({ + auth_provider: "test", + email: "blah@example.com" + }); + node.id = "data-authentication"; + document.querySelector("head").appendChild(node); + }, + afterEach() { + document + .querySelector("head") + .removeChild(document.getElementById("data-authentication")); + } +}); + +QUnit.test("when login not required", async assert => { + await visit("/"); + + assert.equal(currentPath(), "discovery.latest", "it stays on the homepage"); + + assert.ok( + exists("#discourse-modal div.create-account"), + "it shows the registration modal" + ); +}); + +QUnit.test("when login required", async assert => { + Discourse.SiteSettings.login_required = true; + await visit("/"); + + assert.equal(currentPath(), "login", "it redirects to the login page"); + + assert.ok( + exists("#discourse-modal div.create-account"), + "it shows the registration modal" + ); +});