From 9361382be3d97e1fffe518f85b7d5f802ae7a2e6 Mon Sep 17 00:00:00 2001 From: Will Rossiter Date: Thu, 14 Mar 2024 15:09:03 +1300 Subject: [PATCH] FIX mark a successful login attempt when completing a password reset (#10099) --- .../ChangePasswordHandler.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/Security/MemberAuthenticator/ChangePasswordHandler.php b/src/Security/MemberAuthenticator/ChangePasswordHandler.php index 5aefa310e..bd027ba8d 100644 --- a/src/Security/MemberAuthenticator/ChangePasswordHandler.php +++ b/src/Security/MemberAuthenticator/ChangePasswordHandler.php @@ -13,6 +13,7 @@ use SilverStripe\ORM\FieldType\DBField; use SilverStripe\ORM\ValidationException; use SilverStripe\Security\Authenticator; use SilverStripe\Security\IdentityStore; +use SilverStripe\Security\LoginAttempt; use SilverStripe\Security\Member; use SilverStripe\Security\Security; @@ -267,6 +268,21 @@ class ChangePasswordHandler extends RequestHandler // Clear locked out status $member->LockedOutUntil = null; $member->FailedLoginCount = null; + + // Create a successful 'LoginAttempt' as the password is reset + if (Security::config()->get('login_recording')) { + $loginAttempt = LoginAttempt::create(); + $loginAttempt->Status = LoginAttempt::SUCCESS; + $loginAttempt->MemberID = $member->ID; + + if ($member->Email) { + $loginAttempt->setEmail($member->Email); + } + + $loginAttempt->IP = $this->getRequest()->getIP(); + $loginAttempt->write(); + } + // Clear the members login hashes $member->AutoLoginHash = null; $member->AutoLoginExpired = DBDatetime::create()->now();