ok gracias por la respuesta.
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