2012-11-28 76 views
2

我試圖以編程方式從監聽器中註銷當前用戶。 我讀here以編程方式註銷當前用戶

$this->get('security.context')->setToken(null); 
$this->get('request')->getSession()->invalidate(); 

的伎倆,但我就不能叫$this->container->get('security.context')->getToken()->getUser();了,因爲令牌現在NULL

如何註銷用戶,但仍然讓應用程序正常運行? 我在我的控制器函數中調用了getUser(),所以我應該將該標記設置回對應於非認證用戶的東西。我怎樣才能做到這一點?

此外,如果有方法以編程方式啓動新會話並設置閃光消息通知用戶他已經註銷,那就太棒了。

+2

多德。你現在退出了。你想如何從會話中再次獲得用戶?我在你的問題上看到一些邏輯悖論。 –

+0

我不想獲得用戶,我希望能夠調用getUser()方法而不會產生500內部錯誤。當一個未註冊的用戶使用該網站時,我可以調用getUser(),因爲getToken()實際上會返回一個有效的令牌。在以編程方式將用戶關閉後將令牌設置爲NULL後,我的代碼被破壞。 –

+0

爲什麼不做任何你想對用戶做的事情,然後在你的函數結束時你殺掉了令牌/會話來註銷它們? – lifo

回答

1

嘗試

$anonToken = new AnonymousToken('theTokensKey', 'anon.', array()); 
$this->get('security.context')->setToken($anonToken); 

第一個參數是令牌的密鑰(即 '50cdf89882454')

+1

現在它的'security.token_storage'如果有人感興趣。 –

相關問題