diff --git a/src/Security/Member.php b/src/Security/Member.php index c8039c0b6..a861b7ba4 100644 --- a/src/Security/Member.php +++ b/src/Security/Member.php @@ -10,6 +10,7 @@ use SilverStripe\Control\Controller; use SilverStripe\Control\Director; use SilverStripe\Control\Email\Email; use SilverStripe\Control\Email\Mailer; +use SilverStripe\Control\HTTPRequest; use SilverStripe\Core\Config\Config; use SilverStripe\Core\Convert; use SilverStripe\Core\Injector\Injector; @@ -539,14 +540,30 @@ class Member extends DataObject { Deprecation::notice( '5.0.0', - 'This method is deprecated and now does not persist. Please use Security::setCurrentUser(null) or an IdenityStore' + 'This method is deprecated and now does not persist. Please use Security::setCurrentUser(null) or an IdentityStore' ); - $this->extend('beforeMemberLoggedOut'); - Injector::inst()->get(IdentityStore::class)->logOut(Controller::curr()->getRequest()); - // Audit logging hook - $this->extend('afterMemberLoggedOut'); + } + + /** + * Audit logging hook, called before a member is logged out + * + * @param HTTPRequest|null $request + */ + public function beforeMemberLoggedOut(HTTPRequest $request = null) + { + $this->extend('beforeMemberLoggedOut', $request); + } + + /** + * Audit logging hook, called after a member is logged out + * + * @param HTTPRequest|null $request + */ + public function afterMemberLoggedOut(HTTPRequest $request = null) + { + $this->extend('afterMemberLoggedOut', $request); } /** diff --git a/src/Security/RequestAuthenticationHandler.php b/src/Security/RequestAuthenticationHandler.php index ab2f7af72..12994491b 100644 --- a/src/Security/RequestAuthenticationHandler.php +++ b/src/Security/RequestAuthenticationHandler.php @@ -74,10 +74,19 @@ class RequestAuthenticationHandler implements AuthenticationHandler */ public function logOut(HTTPRequest $request = null) { + $member = Security::getCurrentUser(); + if ($member) { + $member->beforeMemberLoggedOut($request); + } + foreach ($this->getHandlers() as $handler) { $handler->logOut($request); } Security::setCurrentUser(null); + + if ($member) { + $member->afterMemberLoggedOut($request); + } } }