repository = $repository; $this->userProvider = $userProvider; $this->tokenFactory = $tokenFactory; $this->userFactory = $userFactory; $this->configuration = $configuration; } /** * @param SamlTokenInterface $token * @return SamlTokenInterface */ public function authenticate(TokenInterface $token) { $user = null; try { /** @var User $user */ $user = $this->userProvider->loadUserByUsername($token->getUsername()); } catch (UsernameNotFoundException $e) { } try { if (null === $user) { $user = $this->userFactory->createUser($token); } else { $this->userFactory->hydrateUser($user, $token); } $this->repository->saveUser($user); } catch (\Exception $ex) { throw new AuthenticationException( sprintf('Failed creating or hydrating user "%s": %s', $token->getUsername(), $ex->getMessage()) ); } $authenticatedToken = $this->tokenFactory->createToken($user, $token->getAttributes(), $user->getRoles()); $authenticatedToken->setAuthenticated(true); return $authenticatedToken; } public function supports(TokenInterface $token) { if (!$this->configuration->isActivated()) { return false; } return $token instanceof SamlTokenInterface; } }