Puede crear un AuthenticationHandler
que Symfony llamará cuando el usuario inicie sesión con éxito, puede guardar el tiempo de inicio de sesión en una propiedad de entidad User
(suponiendo que tenga este escenario).
En primer lugar, crear el manejador de la autenticación de éxito:
namespace Acme\TestBundle\Handler;
use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\DependencyInjection\ContainerAware;
class AuthenticationHandler extends ContainerAware implements AuthenticationSuccessHandlerInterface
{
function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
$token->getUser()->setLoginTime(new \DateTime());
$this->container->get('doctrine')->getEntityManager()->flush();
return new RedirectResponse($this->container->get('router')->generate('login_success'));
}
}
Luego hay que registrar el manejador de la autenticación como servicio en un archivo de configuración, por ejemplo, src/Acme/TestBundle/resources/Config/services.yml
services:
authentication_handler:
class: Acme\TestBundle\Handler\AuthenticationHandler
calls:
- [ setContainer, [ @service_container ] ]
y configurar el inicio de sesión formulario para utilizar el controlador creado, consulte su security.yml
form_login:
success_handler: authentication_handler
Obviamente, para que esto funcione, debe tener una entidad User
con una propiedad loginTime
y el colocador correspondiente. Y necesita configurar el inicio de sesión para usar el repositorio de entidad User
como proveedor de usuario y el DaoAuthenticationProvider
, como se explica aquí: http://symfony.com/doc/current/book/security.html#loading-users-from-the-database.
¿Puede decirnos por qué no se ajusta a sus necesidades? ¿Qué más necesitarías hacer? Los servicios definitivamente serían mi elección para algo como esto ... –