2013-08-03 41 views
7

我已經通過編程實現了登錄功能。如何實現在symfony2中以編程方式記住我?

此代碼如下:

$token = new UsernamePasswordToken($user, $user->getPassword(), 'main', $user->getRoles()); 
$this->get('security.context')->setToken($token); 

$event = new InteractiveLoginEvent($this->getRequest(),$token); 
$this->get('event_dispatcher')->dispatch('security.interactive_login', $event); 

在此之後,我該如何實施還記得我?

(我知道如何使用窗體,但我想實現以編程方式記住我。 )

請幫助...

+0

您可能會檢查[此問題](http://stackoverflow.com/questions/549)的一般圖片。 – HamZa

回答

8

嘗試使用RememberMeToken

$key = $this->getParameter('secret'); // your security key from parameters.yml 

$token = new RememberMeToken($user, 'main', $key); 
$this->get('security.context')->setToken($token); 
+0

我正在嘗試使Facebook登錄。 這使我登錄,但不創建cookie。 '$ token = new RememberMeToken($ user,'default',$ this-> getParameter('secret')); $這個 - >獲取( 'security.token_storage') - > setToken($令牌);' 在我security.yml: '安全: 防火牆: 默認: remember_me: 關鍵:「%的祕密%' lifetime:31536000 always_remember_me:true' – SebCar

0

您可以創建一個具有唯一ID的cookie。然後將該cookie存儲在數據庫中,並在新訪問者訪問該網站時檢查該數據庫。如果您將用戶存儲在數據庫中,最好製作一個額外的列來存儲此信息。順便看看FOSUserBundle。

1

我有同樣的問題。你應該使用RememberMeToken而不是UsernamePasswordToken

這個類的參數和UsernamePasswordToken非常相似,所以我沒有詳細說明。

0

我用同樣的方法forgottenbas建議,但得到了一個錯誤。我不得不使用$這 - >容器(Symfony2的):

$key = $this->container->getParameter('secret'); 

$token = new RememberMeToken($user, 'user_area', $key); 
$this->get('security.context')->setToken($token); 

$用戶是我的User類和「user_area」的一個實例是我的防火牆的名稱。

相關問題