Foros del Web » Programando para Internet » PHP » Symfony »

Blameable en Interactive Login

Estas en el tema de Blameable en Interactive Login en el foro de Symfony en Foros del Web. Hola a tod@s!, Agradecería vuestra ayuda con este tema. Tengo un rest público que actualiza una entidad, la cual uno de los campos de se ...
  #1 (permalink)  
Antiguo 09/06/2015, 04:23
 
Fecha de Ingreso: mayo-2015
Mensajes: 6
Antigüedad: 8 años, 10 meses
Puntos: 0
Blameable en Interactive Login

Hola a tod@s!,

Agradecería vuestra ayuda con este tema.

Tengo un rest público que actualiza una entidad, la cual uno de los campos de se trata de un updatedBy (tipo blameable).

A este rest se le pasa el usuario por parámetro ($paramFetcher->get("user")) y a través de una clase UserBundle se recoge el objeto del usuario y se logea (en teoría :S) mediante security.interactive_login.

El problema es que a la hora de hacer persist/flush sobre la entidad, la funcionalidad de blameable no funciona.

Os pego el código:

///////////////////////////////////

$user = $manager->getRepository ( 'GesconBaseUserBundle:User' )->findOneBy(
array('username' => $paramFetcher->get("user"))
);

if (!$user) {
throw new UsernameNotFoundException("User not found");
} else {
$token = new UsernamePasswordToken($paramFetcher->get("user"), $user->getTempPassword(), "main", $user->getRoles());
$this->get("security.context")->setToken($token); //now the user is logged in

// login event
$request = $this->get("request");
$event = new InteractiveLoginEvent($request, $token);
$this->get("event_dispatcher")->dispatch("security.interactive_login", $event);
}

$entidad->setPrueba('prueba');
$manager->persist($entidad);
$manager->flush();

///////////////////////////////////

También he probado a establecerlo manualmente antes de hacer persist/flush:

$entidad->setUpdatedBy($user->getName());

Pero lógicamente la funcionalidad blameable imagino que se ejecuta mediante un listener cuando se hace el persist, y lo machaca después en blanco.

Entiendo que es un problema del login interactivo, ya que cuando se modifica esta entidad desde dentro de un controller mediante el cauce normal de la aplicación el blameable funciona correctamente.

Muchas gracias por vuestra ayuda!!

Un saludo.
  #2 (permalink)  
Antiguo 09/06/2015, 14:21
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Blameable en Interactive Login

Un detalle es que no veo es tu fragmento de código de donde sale $entidad ?
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 10/06/2015, 04:50
 
Fecha de Ingreso: mayo-2015
Mensajes: 6
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Blameable en Interactive Login

Gracias por responder HHS.

Es una entidad normal con un método "setPrueba" que actualiza una columna de la BBDD.

$entidad = $manager->getRepository ( 'PruebaPruebaBundle:cosas' ) )->find ( $objetoAbuscar );

El caso es que acabo de descubrir que el código de arriba funciona... me explico:
A este rest accedo mediante otro script php desde fuera de Symfony con Curl, mediante POST(pego código):

$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
"Accept: application/json")
);
$curl_response = curl_exec($curl);

Pues bien, me acabo de dar cuenta que utilizando un plugin de Firefox (RESTClient) y haciendo la misma petición a la dirección del rest, añadiendo método POST y Headers "Accept: application/json", aparentemente igual que en el Curl SI FUNCIONA EL BLAMEABLE.

En resumidas cuentas, debe haber algún problema a la hora de acceder a Symfony mediante CURL, pero solo a la hora de hacer el interactive login, ya que el resto del rest se ejecuta con normalidad.

Alguna sugerencia de como logearme en Symfony desde fuera?

Gracias comunidad :P

Etiquetas: doctrine2, entity, login
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:54.