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

Autenticación unica en Symfony2

Estas en el tema de Autenticación unica en Symfony2 en el foro de Symfony en Foros del Web. buenas, esoty desarrollando una app web con symfony2 y quiero evitar que si usuario A se autenticó en mi sistema mientras que su sesión este ...
  #1 (permalink)  
Antiguo 14/01/2016, 10:24
 
Fecha de Ingreso: enero-2016
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Autenticación unica en Symfony2

buenas, esoty desarrollando una app web con symfony2 y quiero evitar que si usuario A se autenticó en mi sistema mientras que su sesión este activa no pueda venir otro usuario a autenticarse con las mismas credenciales que el usuario A, es decir, que 2 personas no puedan estar autenticadas a la vez con las mismas credenciales,se me ocurrio tener un atributo en la tabla usuario que me diga si está autenticado y cuando se auntentique darle un valor y al desloguearse resetearlo, pero si para salir cierrra el navegador o da atras ya no m funciona, agradecería cualquier sugerencia, saludos
  #2 (permalink)  
Antiguo 14/01/2016, 12:53
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Autenticación unica en Symfony2

cambia a cero el tiempo de vida de la sesion, de esa forma si el usuario cierra el navegador se cierra la sesion.
Código yml:
Ver original
  1. #config.yml
  2. framework:
  3.         session:
  4.             cookie_lifetime: 0
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 18/01/2016, 09:17
 
Fecha de Ingreso: enero-2016
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Autenticación unica en Symfony2

en realidad eso me sirve a medias, aunque te lo agardezco de todas formas, lo que esoty tratando hacer es la funcionalidad que tienen muchos sitios web de que no permite que 2 usuarios estén conectados a la vez con las mismas credenciales, agradecería cualquier sugerencia
  #4 (permalink)  
Antiguo 19/01/2016, 18:45
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Autenticación unica en Symfony2

La idea que tienes de verificar por una propiedad que te indique si esta con sesion en el sistema te sirve, solo agregale ademas otro campo para mantener un timestamp que se este actualizando con un tiempo pertinente para saber si el usuario esta conectado con su cuenta, de esa forma cuando se haga un nuevo login puedes controlar si están accediendo doble.

Por otro lado vas a necesitar usar un manejador de eventos para que cuando el usuario intente hacer login puedas verifiques las condiciones que requieras. Esto lo puedes hacer creando una implementación de la interfaz AuthenticationSuccessHandlerInterface https://github.com/symfony/symfony/b...rInterface.php . En el mismo lugar donde esta la interfaz puedes ver ejemplos para que te orientes a la hora de implementarla, ya que la tengas implementada, la tienes que agregarla como servicio http://symfony.com/doc/current/book/...container.html y posterior a eso le indicas al componente de seguridad que va a utilizar tu implementación agregando la directiva success_handler al archivo security.yml; ejemplo
Código yml:
Ver original
  1. form_login:
  2.                 check_path: /admin/login_check
  3.                 login_path: /admin/login
  4.                 always_use_default_target_path: true
  5.                 default_target_path: /admin
  6.                 success_handler: ultra_login_success_handler
En el ejemplo la cadena ultra_login_success_handler es el id que le di al handler cuando lo agregue como servicio.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 21/01/2016, 08:48
 
Fecha de Ingreso: enero-2016
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
Respuesta: Autenticación unica en Symfony2

Disculpa la molestia de veras que si, y de veras que sería tu solución la forma más sencilla, pero como la aplicación es de videos tendría que tener una lapzo de tiempo muy corto en el que actualice el timestamp y eso no estoy muy seguro que sea factible en cuestiónd e rendimiento, lo que quisiera saber es si existe algun evento que me diga cuando se cerró el navegador o cuando se salió de la aplicación
  #6 (permalink)  
Antiguo 21/01/2016, 12:25
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 11 años, 5 meses
Puntos: 379
Respuesta: Autenticación unica en Symfony2

Lo mas cercano a lo que pides es forzar a que la sesión expire cuando se cierre la ventana y eso ya lo comente antes, de ahí en mas tendrás que trabajar del lado del cliente y para eso puedes preguntar en el foro de js
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #7 (permalink)  
Antiguo 11/02/2016, 14:07
 
Fecha de Ingreso: febrero-2016
Mensajes: 14
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: Autenticación unica en Symfony2

Hace un tiempo tuve que resolver el mismo problema.
La solución que adopté fue agregar un atributo a la tabla de Usuarios en el cual guardar el session_id (esto no se si es bueno por seguridad, quizás alguien me lo pueda asegurar).
Paso siguiente crear un servicio que atienda el evento "login_success" o sea, logueo correcto. En ese servicio se guarda la session_id en la tabla del usuario.
Luego crear un nuevo servicio que atienda cada request, y que compare si el session_id almacenado en el momento del request es igual al session_id actual. Si la respuesta es negativa, cerrar la sesión del usuario.

Entonces, si un usuario se loguea se guarda su session_id, y puede navegar. Pero si otro se loguea con el mismo nombre de usuario, el session_id se guarda y reemplaza el anterior. Cuando el primer usuario haga un request, el servicio detecta que el session_id no es igual y revoca los permisos del usuario, dejando logueado al segundo.

Decime que te parece la solución y te comparto algo del código que tengo.

Saludos
  #8 (permalink)  
Antiguo 17/02/2016, 12:42
 
Fecha de Ingreso: enero-2016
Mensajes: 6
Antigüedad: 8 años, 11 meses
Puntos: 0
De acuerdo Respuesta: Autenticación unica en Symfony2

es exactamente lo que estaba buscando te agradecería me compartieras el código que hiciste sobre todo en la parte de los 2 servicios el que se ejecuta cuando se autentica y el que se ejecuat en cada request

Etiquetas: autenticación, symfony2, unica
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 23:40.