keycloak-uncached

KEYCLOAK-2527 Cordova not working

2/23/2016 9:31:31 AM

Details

diff --git a/adapters/oidc/js/src/main/resources/keycloak.js b/adapters/oidc/js/src/main/resources/keycloak.js
index 4bfec59..30453e3 100755
--- a/adapters/oidc/js/src/main/resources/keycloak.js
+++ b/adapters/oidc/js/src/main/resources/keycloak.js
@@ -878,31 +878,28 @@
                         var loginUrl = kc.createLoginUrl(options);
                         var ref = window.open(loginUrl, '_blank', o);
 
-                        var callback;
-                        var error;
+                        var completed = false;
 
                         ref.addEventListener('loadstart', function(event) {
                             if (event.url.indexOf('http://localhost') == 0) {
-                                callback = parseCallback(event.url);
+                                var callback = parseCallback(event.url);
+                                processCallback(callback, promise);
                                 ref.close();
+                                completed = true;
                             }
                         });
 
                         ref.addEventListener('loaderror', function(event) {
-                            if (event.url.indexOf('http://localhost') == 0) {
-                                callback = parseCallback(event.url);
-                                ref.close();
-                            } else {
-                                error = true;
-                                ref.close();
-                            }
-                        });
-
-                        ref.addEventListener('exit', function(event) {
-                            if (error || !callback) {
-                                promise.setError();
-                            } else {
-                                processCallback(callback, promise);
+                            if (!completed) {
+                                if (event.url.indexOf('http://localhost') == 0) {
+                                    var callback = parseCallback(event.url);
+                                    processCallback(callback, promise);
+                                    ref.close();
+                                    completed = true;
+                                } else {
+                                    promise.setError();
+                                    ref.close();
+                                }
                             }
                         });
 
diff --git a/examples/cordova/www/index.html b/examples/cordova/www/index.html
index cd33b24..296986d 100644
--- a/examples/cordova/www/index.html
+++ b/examples/cordova/www/index.html
@@ -48,8 +48,14 @@
             }
         }
 
+        function error() {
+            document.getElementById('authenticated').style.display = 'none';
+            document.getElementById('not-authenticated').style.display = 'block';
+            document.getElementById('error').innerText = 'Failed to initialize Keycloak adapter';
+        }
+
         document.addEventListener("deviceready", function() {
-            keycloak.init({ onLoad: 'check-sso' }).success(updateState);
+            keycloak.init({ onLoad: "check-sso" }).success(updateState).error(error);
         }, false);
     </script>
     <style>
@@ -104,7 +110,7 @@
         <button onclick="keycloak.login()">Log in</button>
     </div>
     <div>
-        <p>Not authenticated</p>
+        <p id="error">Not authenticated</p>
     </div>
 </div>
 </body>