keycloak-aplcache
Changes
adapters/oidc/js/src/main/resources/keycloak.js 37(+15 -22)
Details
adapters/oidc/js/src/main/resources/keycloak.js 37(+15 -22)
diff --git a/adapters/oidc/js/src/main/resources/keycloak.js b/adapters/oidc/js/src/main/resources/keycloak.js
index 2d8f421..9e2e412 100755
--- a/adapters/oidc/js/src/main/resources/keycloak.js
+++ b/adapters/oidc/js/src/main/resources/keycloak.js
@@ -29,7 +29,7 @@
var loginIframe = {
enable: true,
- callbackMap: [],
+ callbackList: [],
interval: 5
};
@@ -830,33 +830,25 @@
document.body.appendChild(iframe);
var messageCallback = function(event) {
- if (event.origin !== loginIframe.iframeOrigin) {
- return;
- }
- try {
- var data = JSON.parse(event.data);
- } catch (err) {
- return;
- }
- if (!data.callbackId) {
+ if (event.origin !== loginIframe.iframeOrigin) {
return;
}
- var promise = loginIframe.callbackMap[data.callbackId];
- if (!promise) {
- return;
+
+ for (i = loginIframe.callbackList.length - 1; i >= 0; --i) {
+ var promise = loginIframe.callbackList[i];
+ if (event.data == "unchanged") {
+ promise.setSuccess();
+ } else {
+ kc.clearToken();
+ promise.setError();
+ }
+ loginIframe.callbackList.splice(i, 1);
}
- delete loginIframe.callbackMap[data.callbackId];
- if ((!kc.sessionId || kc.sessionId == data.session) && data.loggedIn) {
- promise.setSuccess();
- } else {
- kc.clearToken();
- promise.setError();
- }
};
window.addEventListener('message', messageCallback, false);
@@ -873,10 +865,11 @@
function checkLoginIframe() {
var promise = createPromise();
- if (loginIframe.iframe && loginIframe.iframeOrigin) {
+ if (loginIframe.iframe && loginIframe.iframeOrigin && loginIframe.callbackList.length !== 0) {
var msg = {};
msg.callbackId = createCallbackId();
- loginIframe.callbackMap[msg.callbackId] = promise;
+ msg.sessionId = kc.sessionId;
+ loginIframe.callbackList.push(promise);
var origin = loginIframe.iframeOrigin;
loginIframe.iframe.contentWindow.postMessage(JSON.stringify(msg), origin);
} else {
diff --git a/adapters/oidc/js/src/main/resources/login-status-iframe.html b/adapters/oidc/js/src/main/resources/login-status-iframe.html
index fe7eda1..895f2d7 100755
--- a/adapters/oidc/js/src/main/resources/login-status-iframe.html
+++ b/adapters/oidc/js/src/main/resources/login-status-iframe.html
@@ -35,14 +35,15 @@
}
var data = JSON.parse(event.data);
- data.loggedIn = false;
var cookie = getCookie('KEYCLOAK_SESSION');
- if (cookie) {
- data.loggedIn = true;
- data.session = cookie;
+ var state;
+ if (!data.sessionId || data.sessionId == cookie) {
+ state = "unchanged";
+ } else {
+ state = "changed";
}
- event.source.postMessage(JSON.stringify(data),
+ event.source.postMessage(state,
event.origin);
}
window.addEventListener("message", receiveMessage, false);