Bạn có thể thêm người nghe vào sự kiện security.interactive_login
.
đính kèm người nghe của bạn như vậy. Trong ví dụ này, tôi cũng chuyển ngữ cảnh bảo mật và phiên làm phụ thuộc.
Lưu ý: SecurityContext bị phản đối như của Symfony 2.6. Vui lòng tham khảo http://symfony.com/blog/new-in-symfony-2-6-security-component-improvements
parameters:
# ...
account.security_listener.class: Company\AccountBundle\Listener\SecurityListener
services:
# ...
account.security_listener:
class: %account.security_listener.class%
arguments: ['@security.context', '@session']
tags:
- { name: kernel.event_listener, event: security.interactive_login, method: onSecurityInteractiveLogin }
và người nghe của bạn, bạn có thể lưu trữ bất cứ điều gì bạn muốn trên phiên. Trong trường hợp này, tôi đặt múi giờ của người dùng.
<?php
namespace Company\AccountBundle\Listener;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class SecurityListener
{
public function __construct(SecurityContextInterface $security, Session $session)
{
$this->security = $security;
$this->session = $session;
}
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event)
{
$timezone = $this->security->getToken()->getUser()->getTimezone();
if (empty($timezone)) {
$timezone = 'UTC';
}
$this->session->set('timezone', $timezone);
}
}
Làm thế nào để làm điều đó bằng cách sử dụng dịch vụ: http://stackoverflow.com/questions/8308050/how-to-disable-redirection-after-login-check-in-symfony-2/8312188#8312188 – unairoldan