diff --git a/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java b/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java
index f0ad4d8..723ef2e 100644
--- a/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java
+++ b/forms/email-freemarker/src/main/java/org/keycloak/email/freemarker/FreeMarkerEmailProvider.java
@@ -17,6 +17,7 @@ import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
+import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
@@ -130,6 +131,7 @@ public class FreeMarkerEmailProvider implements EmailProvider {
msg.setSubject(subject);
msg.setText(body);
msg.saveChanges();
+ msg.setSentDate(new Date());
Transport transport = session.getTransport("smtp");
if (auth) {
diff --git a/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java b/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java
index 6571037..9591e6f 100755
--- a/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java
+++ b/services/src/main/java/org/keycloak/services/resources/flows/OAuthFlows.java
@@ -42,6 +42,7 @@ import org.keycloak.representations.idm.CredentialRepresentation;
import org.keycloak.services.managers.AccessCodeEntry;
import org.keycloak.services.managers.AuthenticationManager;
import org.keycloak.services.managers.TokenManager;
+import org.keycloak.services.util.CookieHelper;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.MultivaluedMap;
diff --git a/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java b/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
index 0247410..269fa51 100755
--- a/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
+++ b/services/src/main/java/org/keycloak/services/resources/RequiredActionsService.java
@@ -224,6 +224,13 @@ public class RequiredActionsService {
audit.clone().event(EventType.UPDATE_PASSWORD).success();
+ // Password reset through email won't have an associated session
+ if (accessCode.getSessionState() == null) {
+ UserSessionModel userSession = realm.createUserSession(realm.getUserById(accessCode.getUser().getId()), clientConnection.getRemoteAddr());
+ accessCode.getToken().setSessionState(userSession.getId());
+ audit.session(userSession);
+ }
+
return redirectOauth(user, accessCode);
}
@@ -322,10 +329,7 @@ public class RequiredActionsService {
Set<RequiredAction> requiredActions = new HashSet<RequiredAction>(user.getRequiredActions());
requiredActions.add(RequiredAction.UPDATE_PASSWORD);
- UserSessionModel session = realm.createUserSession(user, clientConnection.getRemoteAddr());
- audit.session(session);
-
- AccessCodeEntry accessCode = tokenManager.createAccessCode(scopeParam, state, redirect, realm, client, user, session);
+ AccessCodeEntry accessCode = tokenManager.createAccessCode(scopeParam, state, redirect, realm, client, user, null);
accessCode.setRequiredActions(requiredActions);
accessCode.setAuthMethod("form");
accessCode.setUsernameUsed(username);
diff --git a/testsuite/tools/src/main/webapp/pages/mail.html b/testsuite/tools/src/main/webapp/pages/mail.html
index b378019..400c63a 100644
--- a/testsuite/tools/src/main/webapp/pages/mail.html
+++ b/testsuite/tools/src/main/webapp/pages/mail.html
@@ -7,17 +7,18 @@
<table class="table table-striped table-bordered">
<thead>
<tr>
- <th>From</th>
+ <th>Date</th>
<th>To</th>
+ <th>From</th>
<th>Subject</th>
<th>Body</th>
</tr>
</thead>
<tr data-ng-repeat="m in messages|reverse">
- <td>{{m.from}}</td>
+ <td>{{m.date|date:'medium'}}</td>
<td>{{m.to}}</td>
+ <td>{{m.from}}</td>
<td>{{m.subject}}</td>
<td><pre>{{m.body}}</pre></td>
- <td>{{m.date|date:'medium'}}</td>
</tr>
</table>
\ No newline at end of file