FIX: Fix registration dialog popup for 'full screen' social logins

Regression following the ember3 upgrade. In addition to fixing, this commit consolidates our social registration logic into one place, and adds tests for the behaviour.
This commit is contained in:
David Taylor 2019-01-12 12:08:13 +00:00
parent dcdcaebd0f
commit 49593d1a00
5 changed files with 55 additions and 23 deletions

View File

@ -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();
}
}
});
})();

View File

@ -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))
);
}
});
}
}
};

View File

@ -57,7 +57,6 @@
<%- if !current_user && cookies[:authentication_data] %>
<meta id="data-authentication" data-authentication-data="<%= cookies.delete(:authentication_data) %>">
<%= preload_script "authentication-complete" %>
<%- end %>
</head>

View File

@ -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

View File

@ -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"
);
});