/**
  * This is called when an interactive authentication attempt succeeds. This
  * is called by authentication listeners inheriting from
  * AbstractAuthenticationListener.
  *
  * @param Request $request
  * @param TokenInterface $token
  *
  * @return Response never null
  */
 public function onAuthenticationSuccess(Request $request, TokenInterface $token)
 {
     // Step 1. Invoke success handler
     $response = $this->wrappedSuccessHandler->onAuthenticationSuccess($request, $token);
     // Step 2. Dispatch success event if any
     if ($this->eventDispatcher != null && $this->successEventName != null) {
         $this->eventDispatcher->dispatch($this->successEventName, new LoginEventLog());
     }
     return $response;
 }
 public function onAuthenticationFailure(Request $request, AuthenticationException $exception)
 {
     $targetPath = $this->failureDefault;
     $token = $exception->getToken();
     $this->logger->debug('Authentication failure handled by ' . __CLASS__, [$exception, $exception->getPrevious(), $token]);
     if ($exception instanceof BadCredentialsException && $exception->getPrevious() instanceof UsernameNotFoundException && $token instanceof Token && $token->getRoles()[0]->getRole() == ThirdPartyAuthentication::IDENTIFIED) {
         $this->logger->info('Autoregister');
         // create new user, persist and authenticate
         $user = $this->repository->create($token->getUserUniqueIdentifier(), $token->getProviderKey(), $token->getAttribute('nickname'));
         $newToken = new Token($token->getFirewallName(), $token->getProviderKey(), $token->getUserUniqueIdentifier(), $user->getRoles());
         $this->repository->persist($user);
         $newToken->setUser($user);
         $this->security->setToken($newToken);
         return $this->successLoginHandler->onAuthenticationSuccess($request, $newToken);
     }
     $request->getSession()->set(SecurityContextInterface::AUTHENTICATION_ERROR, $exception);
     return $this->httpUtils->createRedirectResponse($request, $targetPath);
 }