/** * Logs calls and results of the authenticate() method of the Authentication Manager * * @Flow\After("within(Neos\Flow\Security\Authentication\AuthenticationManagerInterface) && method(.*->authenticate())") * @param JoinPointInterface $joinPoint The current joinpoint * @return mixed The result of the target method if it has not been intercepted * @throws \Exception */ public function logManagerAuthenticate(JoinPointInterface $joinPoint) { if ($joinPoint->hasException()) { $exception = $joinPoint->getException(); if (!$exception instanceof NoTokensAuthenticatedException) { $this->securityLogger->log(sprintf('Authentication failed: "%s" #%d', $exception->getMessage(), $exception->getCode()), LOG_NOTICE); } throw $exception; } elseif ($this->alreadyLoggedAuthenticateCall === false) { /** @var AuthenticationManagerInterface $authenticationManager */ $authenticationManager = $joinPoint->getProxy(); if ($authenticationManager->getSecurityContext()->getAccount() !== null) { $this->securityLogger->log(sprintf('Successfully re-authenticated tokens for account "%s"', $authenticationManager->getSecurityContext()->getAccount()->getAccountIdentifier()), LOG_INFO); } else { $this->securityLogger->log('No account authenticated', LOG_INFO); } $this->alreadyLoggedAuthenticateCall = true; } }