/** * {@inheritDoc} */ public function loadUserByUsername($username) { try { $user = parent::loadUserByUsername($username); } catch (UsernameNotFoundException $e) { $user = $this->createEntity($username); $this->em->persist($user); $this->em->flush(); } return $user; }
private function tryHTTPAuth(GetResponseEvent $event) { $request = $event->getRequest(); $username = $request->server->get('PHP_AUTH_USER'); $password = $request->server->get('PHP_AUTH_PW'); if (!$username || !$password) { return false; } $user = $this->userProvider->loadUserByUsername($username); $providerKey = 'main'; $token = new UsernamePasswordToken($user, $password, $providerKey, $user->getRoles()); $encoder = $this->encodeFactory->getEncoder($user); $encodedPass = $encoder->encodePassword($password, $user->getSalt()); //the authenticationManager always never throw an Exception with the UsernamePasswordToken so we validate it manually if ($user->getPassword() === $encodedPass) { $this->securityContext->setToken($token); return true; } $error = ['error' => 'authentication_error', 'error_description' => 'Invalid username and password combination']; $event->setResponse(new Response(json_encode($error))); return false; }
/** * @expectedException \InvalidArgumentException */ public function testLoadUserByUserNameShouldDeclineInvalidInterface() { $repository = $this->getMock('\\Symfony\\Component\\Security\\Core\\User\\AdvancedUserInterface'); $provider = new EntityUserProvider($this->getManager($this->getObjectManager($repository)), 'Symfony\\Bridge\\Doctrine\\Tests\\Fixtures\\User'); $provider->loadUserByUsername('name'); }