Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/01/2016, 05:34
mrmoon
 
Fecha de Ingreso: enero-2016
Mensajes: 15
Antigüedad: 8 años, 10 meses
Puntos: 0
Comparar contraseña encriptadas login

Hola.
Soy nuevo en el foro y en Symfony, he esta buscando un tema relacionado con el mio, pero hay tantos que ya estoy mareado.
He seguido los videos de http://www.cesarcancino.com/ y http://www.edsonmm.com/curso-de-symfony-2/.
En uno crea los usuarios encriptando la clave, y guardándola con Doctrine en una BBDD. La idea es hacer una autentificacion por script, no como lo trae el manual de symfony por cortafuego.
La crea de esta forma:
UserController
Código PHP:
 public function createAction(Request $request)
        {
            
$user = new User();
            
$form=$this->createCreateForm($user);
            
$form->handleRequest($request);
    
           if(
$form->isValid())
            {
                
$password $form->get('password')->getData();
                
                
$passwordConstraint = new AssertNotBlank();
                
$errorList $this->get('validator')->validate($password$passwordConstraint);
                
                if(
count($errorList) == 0)
                {
                     
                    
$encoder $this->container->get('security.password_encoder');
                    
$encoded $encoder->encodePassword($user$password);
                   
                    
$user->setPassword($encoded);
                   
                    
$em $this->getDoctrine()->getManager();
                    
$em->persist($user);
                    
$em->flush(); 
Pero al hacer la Action del Login(ya en el Login), no consigo encriptar la clave introducida en este, para compararla con la clave guardada en la BBDD. Me salen siempre distinta.

DefaultController.php

Código PHP:
     public function loginAction(Request $request)
    {
        
        if(
$request->getMethod()=="POST")
        {
            
$email=$request->get("correo");
            
$password=$request->get("pass");
            
//echo "correo=".$correo."<br>pass=".$pass;exit;
            
$user=$this->getDoctrine()->getRepository('bdBundle:Usuarios')->findOneBy(array("correo"=>$email,"pass"=>$password));
            if(
$user)
            {
               
$session=$request->getSession();
               
$session->set("id",$user->getId());
               
$session->set("nombre",$user->getNombre());
               
//echo $session->get("nombre");exit;
               
return $this->redirect($this->generateUrl('bd_homepage'));
            }else
            {
                 
$this->get('session')->getFlashBag()->add(
                                
'mensaje',
                                
'Los datos ingresados no son válidos'
                            
);
                    return 
$this->redirect($this->generateUrl('bd_homepagelogin'));
            }
        }
        
        return 
$this->render('bdBundle:Trabajo:login.html.twig');
    } 
Esta funciona perfectamente sin los password encriptado, no se como encriptar $password.
lo he intentado asi:
Código PHP:
            $email=$request->get("username");
            
$password=$request->get("password");
            
$user=$this->getDoctrine()->getRepository('userBundle:User')->findOneBy(array("username"=>$email));
            
//print_r($user);exit;
            
$encoder $this->container->get('security.password_encoder');
            
$encoded $encoder->encodePassword($user$password); 
La verdad es que no comprendo muy bien el funcionamiento de encodePassword

Saludos.