13
13
use Magento \Customer \Api \Data \AddressInterface ;
14
14
use Magento \Customer \Api \Data \CustomerInterface ;
15
15
use Magento \Customer \Api \Data \ValidationResultsInterfaceFactory ;
16
+ use Magento \Customer \Api \SessionCleanerInterface ;
16
17
use Magento \Customer \Helper \View as CustomerViewHelper ;
17
18
use Magento \Customer \Model \Config \Share as ConfigShare ;
18
19
use Magento \Customer \Model \Customer as CustomerModel ;
@@ -200,6 +201,7 @@ class AccountManagement implements AccountManagementInterface
200
201
* Minimum password length
201
202
*
202
203
* @deprecated Get rid of Helpers in Password Security Management
204
+ * @see \Magento\Customer\Model\AccountManagement::XML_PATH_MINIMUM_PASSWORD_LENGTH
203
205
*/
204
206
const MIN_PASSWORD_LENGTH = 6 ;
205
207
@@ -283,21 +285,6 @@ class AccountManagement implements AccountManagementInterface
283
285
*/
284
286
private $ transportBuilder ;
285
287
286
- /**
287
- * @var SessionManagerInterface
288
- */
289
- private $ sessionManager ;
290
-
291
- /**
292
- * @var SaveHandlerInterface
293
- */
294
- private $ saveHandler ;
295
-
296
- /**
297
- * @var CollectionFactory
298
- */
299
- private $ visitorCollectionFactory ;
300
-
301
288
/**
302
289
* @var DataObjectProcessor
303
290
*/
@@ -383,6 +370,11 @@ class AccountManagement implements AccountManagementInterface
383
370
*/
384
371
private $ getByToken ;
385
372
373
+ /**
374
+ * @var SessionCleanerInterface
375
+ */
376
+ private $ sessionCleaner ;
377
+
386
378
/**
387
379
* @param CustomerFactory $customerFactory
388
380
* @param ManagerInterface $eventManager
@@ -417,10 +409,12 @@ class AccountManagement implements AccountManagementInterface
417
409
* @param AddressRegistry|null $addressRegistry
418
410
* @param GetCustomerByToken|null $getByToken
419
411
* @param AllowedCountries|null $allowedCountriesReader
412
+ * @param SessionCleanerInterface|null $sessionCleaner
420
413
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
421
414
* @SuppressWarnings(PHPMD.ExcessiveParameterList)
422
415
* @SuppressWarnings(PHPMD.NPathComplexity)
423
416
* @SuppressWarnings(PHPMD.LongVariable)
417
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
424
418
*/
425
419
public function __construct (
426
420
CustomerFactory $ customerFactory ,
@@ -455,7 +449,8 @@ public function __construct(
455
449
SearchCriteriaBuilder $ searchCriteriaBuilder = null ,
456
450
AddressRegistry $ addressRegistry = null ,
457
451
GetCustomerByToken $ getByToken = null ,
458
- AllowedCountries $ allowedCountriesReader = null
452
+ AllowedCountries $ allowedCountriesReader = null ,
453
+ SessionCleanerInterface $ sessionCleaner = null
459
454
) {
460
455
$ this ->customerFactory = $ customerFactory ;
461
456
$ this ->eventManager = $ eventManager ;
@@ -486,12 +481,6 @@ public function __construct(
486
481
$ this ->dateTimeFactory = $ dateTimeFactory ?: $ objectManager ->get (DateTimeFactory::class);
487
482
$ this ->accountConfirmation = $ accountConfirmation ?: $ objectManager
488
483
->get (AccountConfirmation::class);
489
- $ this ->sessionManager = $ sessionManager
490
- ?: $ objectManager ->get (SessionManagerInterface::class);
491
- $ this ->saveHandler = $ saveHandler
492
- ?: $ objectManager ->get (SaveHandlerInterface::class);
493
- $ this ->visitorCollectionFactory = $ visitorCollectionFactory
494
- ?: $ objectManager ->get (CollectionFactory::class);
495
484
$ this ->searchCriteriaBuilder = $ searchCriteriaBuilder
496
485
?: $ objectManager ->get (SearchCriteriaBuilder::class);
497
486
$ this ->addressRegistry = $ addressRegistry
@@ -500,6 +489,7 @@ public function __construct(
500
489
?: $ objectManager ->get (GetCustomerByToken::class);
501
490
$ this ->allowedCountriesReader = $ allowedCountriesReader
502
491
?: $ objectManager ->get (AllowedCountries::class);
492
+ $ this ->sessionCleaner = $ sessionCleaner ?? $ objectManager ->get (SessionCleanerInterface::class);
503
493
}
504
494
505
495
/**
@@ -538,6 +528,8 @@ public function resendConfirmation($email, $websiteId = null, $redirectUrl = '')
538
528
} catch (MailException $ e ) {
539
529
// If we are not able to send a new account email, this should be ignored
540
530
$ this ->logger ->critical ($ e );
531
+
532
+ return false ;
541
533
}
542
534
return true ;
543
535
}
@@ -725,7 +717,7 @@ public function resetPassword($email, $resetToken, $newPassword)
725
717
$ customerSecure ->setRpToken (null );
726
718
$ customerSecure ->setRpTokenCreatedAt (null );
727
719
$ customerSecure ->setPasswordHash ($ this ->createPasswordHash ($ newPassword ));
728
- $ this ->destroyCustomerSessions ( $ customer ->getId ());
720
+ $ this ->sessionCleaner -> clearFor (( int ) $ customer ->getId ());
729
721
$ this ->customerRepository ->save ($ customer );
730
722
731
723
return true ;
@@ -1054,7 +1046,7 @@ private function changePasswordForCustomer($customer, $currentPassword, $newPass
1054
1046
$ customerSecure ->setRpTokenCreatedAt (null );
1055
1047
$ this ->checkPasswordStrength ($ newPassword );
1056
1048
$ customerSecure ->setPasswordHash ($ this ->createPasswordHash ($ newPassword ));
1057
- $ this ->destroyCustomerSessions ( $ customer ->getId ());
1049
+ $ this ->sessionCleaner -> clearFor (( int ) $ customer ->getId ());
1058
1050
$ this ->disableAddressValidation ($ customer );
1059
1051
$ this ->customerRepository ->save ($ customer );
1060
1052
@@ -1607,36 +1599,6 @@ private function getEmailNotification()
1607
1599
}
1608
1600
}
1609
1601
1610
- /**
1611
- * Destroy all active customer sessions by customer id (current session will not be destroyed).
1612
- *
1613
- * Customer sessions which should be deleted are collecting from the "customer_visitor" table considering
1614
- * configured session lifetime.
1615
- *
1616
- * @param string|int $customerId
1617
- * @return void
1618
- */
1619
- private function destroyCustomerSessions ($ customerId )
1620
- {
1621
- $ sessionLifetime = $ this ->scopeConfig ->getValue (
1622
- \Magento \Framework \Session \Config::XML_PATH_COOKIE_LIFETIME ,
1623
- \Magento \Store \Model \ScopeInterface::SCOPE_STORE
1624
- );
1625
- $ dateTime = $ this ->dateTimeFactory ->create ();
1626
- $ activeSessionsTime = $ dateTime ->setTimestamp ($ dateTime ->getTimestamp () - $ sessionLifetime )
1627
- ->format (DateTime::DATETIME_PHP_FORMAT );
1628
- /** @var \Magento\Customer\Model\ResourceModel\Visitor\Collection $visitorCollection */
1629
- $ visitorCollection = $ this ->visitorCollectionFactory ->create ();
1630
- $ visitorCollection ->addFieldToFilter ('customer_id ' , $ customerId );
1631
- $ visitorCollection ->addFieldToFilter ('last_visit_at ' , ['from ' => $ activeSessionsTime ]);
1632
- $ visitorCollection ->addFieldToFilter ('session_id ' , ['neq ' => $ this ->sessionManager ->getSessionId ()]);
1633
- /** @var \Magento\Customer\Model\Visitor $visitor */
1634
- foreach ($ visitorCollection ->getItems () as $ visitor ) {
1635
- $ sessionId = $ visitor ->getSessionId ();
1636
- $ this ->saveHandler ->destroy ($ sessionId );
1637
- }
1638
- }
1639
-
1640
1602
/**
1641
1603
* Set ignore_validation_flag for reset password flow to skip unnecessary address and customer validation
1642
1604
*
0 commit comments