2015-02-08 67 views
2

在這種情況下,成功登錄後,我需要將用戶的登錄時間更新到基礎表中。登錄後的Symfony 2做了一些額外的工作

用戶實體當前實施UserInterface,並且表現良好。只是想添加一些額外的代碼來記錄用戶的登錄日期時間。

搜索該網站,似乎我使用EventListener等是有點沉重。其他更輕的選擇?

+0

沒有用事件偵聽器。這是最好的方法。 – Aitch 2015-02-08 23:38:04

+0

重複http://stackoverflow.com/questions/11180351/symfony2-after-successful-login-event-perform-set-of-actions – Aitch 2015-02-08 23:39:00

回答

2

您可以實施成功手杖。

  1. 寫一個類實現AuthenticationSuccessHandlerInterface
  2. 定義它作爲一種服務(你可以注入其他服務,如學說 或安全性方面,你的情況會議)

添加例如:

firewalls: 
dev: 
    pattern: ^/(_(profiler|wdt)|css|images|js)/ 
    security: false 

secured_area: 
    pattern: ^/ 
    anonymous: ~ 
    form_login: 
     login_path: login 
     check_path: login_check 
     success_handler: some.service.id 
    logout: 
     path: logout 
     target:/

檢查this作爲一個完整的例子和reference doc爲所有symfony2安全配置選項(您也可以配置failure_handler)。

在我的工作我的解決方案的實現方法onSecurityInteractiveLogin在我的聽衆爲:

public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
    { 
     $user = $event->getAuthenticationToken()->getUser(); 

     $user->setLastLogin(new \Datetime()); 
     // Entity manager injected by container in the service definition 
     $this->em->persist($user); 
     $this->em->flush(); 


    } 

希望這有助於

+0

這應該是處理登錄成功/失敗的方式。 – 2015-02-09 07:13:39

+0

Hi @TaylorR如果這個或任何答案已經解決了您的問題,請點擊複選標記考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這向更廣泛的社區表明,您已經找到了解決方案,併爲答覆者和您自己提供了一些聲譽。沒有義務這樣做。 – Matteo 2015-03-17 09:12:47