Crear un login usando Doctrine DBAL y validar con SECURITY.YML

75 views
Skip to first unread message

Alfredo code

unread,
Oct 29, 2014, 3:16:01 AM10/29/14
to symfo...@googlegroups.com
hola quiero saber que debo de hacer para crear un login, poder validarlo usando el archivo security.yml, lo que pasa es que tengo una BD ya creada, no quiero crear entidades, por eso estoy usando doctrine dbal. Hay muchos ejemplos en linea pero usan Doctrine ORM, con sus respectivas Entidades, el archivo security hace referencia a la entidad de usuario.

Espero que alguien pueda Guiarme. Gracias por su tiempo.

Absalón Valdés Ormeño

unread,
Nov 2, 2014, 6:08:11 PM11/2/14
to symfo...@googlegroups.com
1) Crea una clase que uses como servicio para proveer usuarios. Sería un "custom user provider". Esa clase debe implementar una interface especifica de Symfony. 

use Doctrine\DBAL\Connection;
use Symfony\Component\Security\Core\User\UserProviderInterface;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
use Symfony\Component\Security\Core\Exception\UnsupportedUserException;

class MyUserProvider implements UserProviderInterface

    // inyectas la conexión de doctrine DBAL
    public function __construct(Connection $db)
    {
       $this->db = $db;
    }

    // Estos metodos son los que debes implementar de la interface
    public function loadUserByUsername($username)
    {
      // buscar al usuario
      $usuario = $this->db->fetchAssoc('select * from usuarios where username = ?', [$username]);
       
      if ($usuario) {
           return new Usuario($usuario['username'], $usuario['password'], $usuario['salt'], $usuario['roles']);
      }

      throw new UsernameNotFoundException(sprintf('Usuario %s no encontrado', $username));
    }


    public function refreshUser(UserInterface $user)
    {
        if (!$user instanceof Usuario) {
            throw new UnsupportedUserException(
                sprintf('Instances of "%s" are not supported.', get_class($user))
            );
        }

        return $this->loadUserByUsername($user->getUsername());
    }

    public function supportsClass($class)
    {
        return $class === get_class($this);
    }
}

2) DEBES crear una clase Usuario que contenga los datos... bueno, del usuario que acabas de encontrar.

3) Debes registrar el servicio MyUserProvider en services.ym en tu bundle.

services:
    my_user_provider:
        class: BlaBundle\Bla\User\MyUserProvider; // Nombre completo de la clase
        arguments: [@doctrine.dbal.default_connection]


4) Luego registras ese provider en la configuración de seguridad

security:
    providers:
        myprovider:
            id: my_user_provider

    encoders:
        BlaBundle\Bla\User\Usuario: sha512 // debes indicar como se "hashearan" los passwords

5) Listo.

Saludos.


El 29 de octubre de 2014, 4:16, Alfredo code <alfred...@gmail.com> escribió:
hola quiero saber que debo de hacer para crear un login, poder validarlo usando el archivo security.yml, lo que pasa es que tengo una BD ya creada, no quiero crear entidades, por eso estoy usando doctrine dbal. Hay muchos ejemplos en linea pero usan Doctrine ORM, con sus respectivas Entidades, el archivo security hace referencia a la entidad de usuario.

Espero que alguien pueda Guiarme. Gracias por su tiempo.

--
--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es

---
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a symfony-es+...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.



--
Absalon Valdés Ormeño.
http://es.gravatar.com/absalonvaldes

Alfredo code

unread,
Nov 4, 2014, 10:34:37 PM11/4/14
to symfo...@googlegroups.com
Gracias por la ayuda, me sirvio de maravilla, de nuevo gracias

Carlos Cordova

unread,
Mar 4, 2016, 3:33:14 PM3/4/16
to symfony-es

Estimado, tengo el mismo problema...me podrias publicar el codigo ya que a mi no me resulta en symfony 2.8...gracias...
Reply all
Reply to author
Forward
0 new messages