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")