symfony2 generate form entitymanagerinterface consultas authentication doctrine2 symfony

authentication - form - generate entities symfony 4



Autenticación Symfony 2 con Entidad(doctrina) (1)

Finalmente alguien me ayudó. El problema es que no estaba usando sal para crear la contraseña, y en la función getSalt de la clase User devolví la identificación.

La contraseña se genera así (en el controlador):

$factory = $this->container->get(''security.encoder_factory''); $encoder = $factory->getEncoder($user); $pwd = $encoder->encodePassword(''your_random_password'', $user->getSalt()); $user->setPassword($pwd);

Creo que probé todo el código en todas las publicaciones sobre autenticación con (doctrine) Entity en Symfony 2. Y no puedo hacer que funcione. Cuando uso el proveedor in_memory todo funciona bien. Estoy usando el PR8.

Mi security.yml

security: encoders: Partners/FrontendBundle/Entity/User: plaintext Symfony/Component/Security/Core/User/User: plaintext providers: main: entity: { class: FrontendBundle:User, property: username } # in_memory: # users: # sergi: { password: boo123, roles: [ ''ROLE_USER'' ] } firewalls: main: pattern: /.* form_login: true anonymous: true logout: true access_control: - { path: /docs.*, role: ROLE_USER } - { path: /control.*, role: ROLE_USER } - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY } role_hierarchy: ROLE_ADMIN: ROLE_USER

Mi entidad de usuario

<?php namespace Partners/FrontendBundle/Entity; use Symfony/Component/Security/Core/User/UserInterface; use Partners/FrontendBundle/Repository/UserRepository; /** * @orm:Entity(repositoryClass="Partners/FrontendBundle/Repository /UserRepository") * @orm:Table(name="users") */ class User implements UserInterface { /** * @orm:Id * @orm:Column(type="integer") * @orm:GeneratedValue(strategy="IDENTITY") */ protected $id; /** * @orm:Column(type="string", length="32", unique=true) */ protected $username; /** * @orm:Column(type="string", length="255", unique=true) */ protected $email; /** * @orm:Column(type="string", length="128") */ protected $password; /** * @orm:Column(type="string", length="128") */ protected $organization; /** * @orm:Column(type="string", length="128") */ protected $contact; /** * @orm:Column(type="string", length="16") */ protected $phone; /** * @orm:Column(type="string", length="10") */ protected $cid; /** * @orm:Column(type="smallint") */ protected $status; public function getId() { return $this->id; } public function setId($id) { $this->id = $id; } public function getUsername() { return $this->username; } public function setUsername($username) { $this->username = $username; } public function getPassword() { return $this->password; } public function setPassword($password) { $this->password = $password; } public function setEmail($email) { $this->email = $email; } public function getEmail() { return $this->email; } public function setPhone($phone) { $this->phone = $phone; } public function getPhone() { return $this->phone; } public function setContact($contact) { $this->contact = $contact; } public function getContact() { return $this->contact; } public function setOrganization($org) { $this->organization = $org; } public function getOrganization() { return $this->organization; } public function setCid($cid) { $this->cid = $cid; } public function getCid() { return $this->cid; } public function setStatus($status) { $this->status = $status; } public function getStatus() { return $this->status; } /** * Implementing the UserInterface interface */ public function __toString() { return $this->getUsername(); } public function getRoles() { return array(''ROLE_USER''); } public function eraseCredentials() { return false; } public function getSalt() { return $this->getId(); } /** * equals. * * @param UserInterface $account * @return bool */ public function equals(UserInterface $account) { if ($account->getUsername() != $this->getUsername) { return false; } if ($account->getEmail() != $this->getEmail) { return false; } return true; } }

El UserRepository

<?php namespace Partners/FrontendBundle/Repository; use Doctrine/ORM/EntityRepository; use Symfony/Component/Security/Core/User/UserProviderInterface; use Symfony/Component/Security/Core/User/UserInterface; class UserRepository extends EntityRepository implements UserProviderInterface { const CREATED = 0; const ACTIVE = 10; const INACTIVE = 20; /** * loadUserByUsername. * * @param string $username * @return Partners/FrontendBundle/Entity/User */ public function loadUserByUsername($username) { return $this->findOneBy(array(''username'' => $username)); } function loadUser(UserInterface $user) { return $user; } function loadUserByAccount(AccountInterface $account) { return $this->loadUserByUsername($account->getUsername()); } public function supportsClass($class) { return true; } }

Cuando llene el formulario de inicio de sesión, el error en $ error = $ this-> get (''request'') -> getSession () -> get (SecurityContext :: AUTHENTICATION_ERROR); es:

exception ''Symfony/Component/Security/Core/Exception /BadCredentialsException'' with message ''Bad credentials'' in /var/www/ inspiring/trunk/Symfony/vendor/symfony/src/Symfony/Component/Security/ Core/Authentication/Provider/DaoAuthenticationProvider.php:66 Stack trace: #0 /var/www/inspiring/trunk/Symfony/vendor/symfony/src/Symfony/ Component/HttpFoundation/SessionStorage/NativeSessionStorage.php(81): session_start() #1 /var/www/inspiring/trunk/Symfony/app/cache/dev/ classes-53824.php(284): Symfony/Component/HttpFoundation/SessionStorage /NativeSessionStorage->start() #2 /var/www/inspiring/trunk/Symfony/app/ cache/dev/appDevDebugProjectContainer.php(1151): Symfony/Component /HttpFoundation/Session->start() #3 /var/www/inspiring/trunk/Symfony/ app/bootstrap.php.cache(109): appDevDebugProjectContainer- >getSessionService() #4 /var/www/inspiring/trunk/Symfony/app/cache/dev/ classes-53824.php(1553): Symfony/Component/DependencyInjection /Container->get(''session'') #5 /var/www/inspiring/trunk/Symfony/app/ cache/dev/classes-53824.php(1544): Symfony/Bundle/FrameworkBundle /RequestListener->initializeSession(Object(Symfony/Component /HttpFoundation/Request), true) #6 /var/www/inspiring/trunk/Symfony/ app/cache/dev/classes-53824.php(1214): Symfony/Bundle/FrameworkBundle /RequestListener->onCoreRequest(Object(Symfony/Component/HttpKernel /Event/GetResponseEvent)) #7 /var/www/inspiring/trunk/Symfony/vendor/ symfony/src/Symfony/Bundle/FrameworkBundle/Debug/ TraceableEventDispatcher.php(49): Symfony/Component/EventDispatcher /EventDispatcher->triggerListener(Object(Symfony/Bundle/FrameworkBundle /RequestListener), ''onCoreRequest'', Object(Symfony/Component/HttpKernel /Event/GetResponseEvent)) #8 /var/www/inspiring/trunk/Symfony/app/ cache/dev/classes-53824.php(1146): Symfony/Bundle/FrameworkBundle/Debug /TraceableEventDispatcher->triggerListener(Object(Symfony/Bundle /FrameworkBundle/RequestListener), ''onCoreRequest'', Object(Symfony /Component/HttpKernel/Event/GetResponseEvent)) #9 /var/www/inspiring/ trunk/Symfony/app/cache/dev/classes-53824.php(1734): Symfony/Component /EventDispatcher/EventDispatcher->dispatch(''onCoreRequest'', Object(Symfony/Component/HttpKernel/Event/GetResponseEvent)) #10 /var/ www/inspiring/trunk/Symfony/app/bootstrap.php.cache(411): Symfony /Bundle/FrameworkBundle/ContainerAwareEventDispatcher- >dispatch(''onCoreRequest'', Object(Symfony/Component/HttpKernel/Event /GetResponseEvent)) #11 /var/www/inspiring/trunk/Symfony/app/ bootstrap.php.cache(400): Symfony/Component/HttpKernel/HttpKernel- >handleRaw(Object(Symfony/Component/HttpFoundation/Request), 1) #12 / var/www/inspiring/trunk/Symfony/vendor/symfony/src/Symfony/Bundle/ FrameworkBundle/HttpKernel.php(35): Symfony/Component/HttpKernel /HttpKernel->handle(Object(Symfony/Component/HttpFoundation/Request), 1, true) #13 /var/www/inspiring/trunk/Symfony/app/ bootstrap.php.cache(576): Symfony/Bundle/FrameworkBundle/HttpKernel- >handle(Object(Symfony/Component/HttpFoundation/Request), 1, true) #14 /var/www/inspiring/trunk/Symfony/web/app_dev.php(15): Symfony /Component/HttpKernel/Kernel->handle(Object(Symfony/Component /HttpFoundation/Request)) #15 {main}

No sé dónde puede estar el problema.