Usuario inactivo en fosuserbundle

107 views
Skip to first unread message

Danny alfonzo Viana perez

unread,
May 30, 2012, 11:28:36 PM5/30/12
to symfo...@googlegroups.com
Saludos amigos, he intadado el fosuserbundle y lo que quisiera es saber como hacen para interceptar el login de usuario y mandar el mensaje de usuario inactivo cuando no se ha validado el token del mismo, intente mirando dentro del bundle como tal pero no encontre nada, tenia la idea de que como se puede programar un lisener para que se ejecute despues del login tambien se podia pero antes del login, alguno de ustedes saben comp lo hacen?

El asunto es que tengo mi control de usuario normal como a mi me gusta (propio, no el fosuser) y lo unico que falta es bloquear el acceso a los usuarios que no confirmen su email o que el admin del sistema los ponga inactivos

Javier Marcon

unread,
May 31, 2012, 8:15:17 AM5/31/12
to symfo...@googlegroups.com
El día 31 de mayo de 2012 00:28, Danny alfonzo Viana perez
<dannyfi...@gmail.com> escribió:
> Saludos amigos, he intadado el fosuserbundle y lo que quisiera es saber como hacen para interceptar el login de usuario y mandar el mensaje de usuario inactivo cuando no se ha validado el token del mismo, intente mirando dentro del bundle como tal pero no encontre nada, tenia la idea de que como se puede programar un lisener para que se ejecute despues del login tambien se podia pero antes del login, alguno de ustedes saben comp lo hacen?
>
> El asunto es que tengo mi control de usuario normal como a mi me gusta (propio, no el fosuser) y lo unico que falta es bloquear el acceso a los usuarios que no confirmen su email o que el admin del sistema los ponga inactivos
>

Cuando procesas el formulario de login, deberías poner un if que se
fije en la tablacorrespondiente si esta validado o no, y si no está
validado, retornas al login con un flash que diga que tenes que estar
validado para loguearte. El tema es que como no pusite el codigo de
como validas los usuarios, no te podemos poner el codigo de como
hacerlo.

Danny alfonzo Viana perez

unread,
May 31, 2012, 8:45:26 AM5/31/12
to symfo...@googlegroups.com
ok gracias por la respuesta.
mi security.yml

security:
    
    firewalls:
        frontend:
            pattern:  ^/
            anonymous: ~
            form_login:
                login_path: /usuario/login/
                check_path: /usuario/login_check/
            logout:
                path: /usuario/logout/
                target: /usuario/login/
            remember_me:
                key:      sitio123
                lifetime: 604800        # 7 * 24 * 3600 = 604.800 = 1 semana
    access_control:
        - { path: ^/usuario/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/usuario/registro, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/usuario/*, roles: ROLE_USUARIO }


    providers:
        usuarios:
            entity: { class: Sitio\UsuarioBundle\Entity\Usuario, property: email }

    encoders:
        Sitio\UsuarioBundle\Entity\Usuario: { algorithm: sha512, iterations:10 }


en mi entidad usuario tengo un campo:

/**
     * @var boolean $activo
     *
     * @ORM\Column(name="activo", type="boolean")
     */
    private $activo;

y otro

/**
     * @var string $hashcode
     *
     * @ORM\Column(name="hashcode", type="string", length=255, nullable=true)
     */
    private $hashcode;

el hashcode se llena en el registro con este valor

$codigo = hash('ripemd128',mt_rand(-9999999999, 9999999999));
$usuario->setHashcode($codigo);
$usuario->setActivo(0);  //inactivo

y tengo un controlador para activar el usuario con este hast que se le menda por email
en la url /activate

registro_activacion:
    pattern: /activate/{email}/{hastcode}/
    defaults: { _controller: UsuarioBundle:Default:activacion }

public function activacionAction($email,$hastcode)
{
$em = $this->getDoctrine()->getEntityManager();
$usuario = $em->getRepository('UsuarioBundle:Usuario')->findBy(array(
'email'    => $email,
'hashcode' => $hastcode
));
if(!$usuario){
$activado = false;
}else{
$usuario->setActivo(true);  //activo
$em->persist($usuario);
$em->flush();
$activado = true;
}
return $this->render('UsuarioBundle:Default:activar.html.twig',array(
'activado' => $activado
));
}


y mi controlador de login es este:

public function loginAction()
{
$contexto = $this->get('security.context');
if ($contexto->isGranted('IS_AUTHENTICATED_FULLY')) {
// ya esta logueado
return $this->redirect($this->generateUrl('usuario_home'));
}else{
$peticion = $this->getRequest();
$sesion   = $peticion->getSession();
$error = $peticion->attributes->get(
SecurityContext::AUTHENTICATION_ERROR,
$sesion->get(SecurityContext::AUTHENTICATION_ERROR)
);

return $this->render('UsuarioBundle:Default:login.html.twig', array(
'last_username' => $sesion->get(SecurityContext::LAST_USERNAME),
'error'         => $error
));

}
    
}

taboen en la entidad tengo un campo usuario_roles que es tipo text, y se llenar con los roles separados por coma,
luego en los funcion getRoles() de userinterface le coloco 

function getRoles()
{
    $roles_del_usuario = $this->getUserRoles();    
    
    $array_roles = explode(",", $roles_del_usuario);
        
    return $array_roles;
}

entonces hago casi todo lo que hace el fosuser, lo que me falta es bloquear el login para usuarios inactivos

NOTA: se que si uso el fosuserbundle no tendria que preocuparme de esto, y es verdad, pero para fines de aprender es que quiero hacer mi propio bundle de manejo de usuario

SALUDOS Y GRACIAS 

Danny alfonzo Viana perez

unread,
Jun 2, 2012, 9:59:38 AM6/2/12
to symfo...@googlegroups.com
amigos por favor, alguien sabe como hacer estos?
Reply all
Reply to author
Forward
0 new messages