keycloak-memoizeit

Handle social registration with prefilled info when triggered

8/26/2013 11:18:46 AM

Details

diff --git a/services/src/main/java/org/keycloak/services/resources/SocialResource.java b/services/src/main/java/org/keycloak/services/resources/SocialResource.java
index 0f64e5d..178d803 100644
--- a/services/src/main/java/org/keycloak/services/resources/SocialResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/SocialResource.java
@@ -290,8 +290,9 @@ public class SocialResource {
                 Response response1 = tokenService.processRegisterImpl(clientId, scope, state, redirectUri, formData, true);
 
                 // Some error occured during registration
-                if (response1 == null) {
-                    return null;
+                if (response1 != null || request.wasForwarded()) {
+                    logger.warn("Registration attempt wasn't successful. Request already forwarded or redirected.");
+                    return response1;
                 }
 
                 String username = formData.getFirst("username");
@@ -310,7 +311,7 @@ public class SocialResource {
                 response.addNewCookie(newCookie);
                 socialRequestManager.retrieveData(requestId);
 
-                return response1;
+                return tokenService.processLogin(clientId, scope, state, redirectUri, formData);
             }
         }.call();
     }
diff --git a/services/src/main/java/org/keycloak/services/resources/TokenService.java b/services/src/main/java/org/keycloak/services/resources/TokenService.java
index b05e498..41c01a9 100755
--- a/services/src/main/java/org/keycloak/services/resources/TokenService.java
+++ b/services/src/main/java/org/keycloak/services/resources/TokenService.java
@@ -249,7 +249,15 @@ public class TokenService {
         return new Transaction<Response>() {
             @Override
             protected Response callImpl() {
-                return processRegisterImpl(clientId, scopeParam, state, redirect, formData, false);
+                Response registrationResponse = processRegisterImpl(clientId, scopeParam, state, redirect, formData, false);
+
+                // If request has been already forwarded (either due to security or validation error) then we won't continue with login
+                if (registrationResponse != null || request.wasForwarded()) {
+                    logger.warn("Registration attempt wasn't successful. Request already forwarded or redirected.");
+                    return registrationResponse;
+                } else {
+                    return processLogin(clientId, scopeParam, state, redirect, formData);
+                }
             }
         }.call();
     }
@@ -332,7 +340,7 @@ public class TokenService {
             realm.grantRole(user, role);
         }
 
-        return processLogin(clientId, scopeParam, state, redirect, formData);
+        return null;
     }
 
     @Path("access/codes")