2013-04-10 80 views
0

我的用戶可以在表單上更改他們的密碼。如果這個表單有效編碼我它,通過使用Symfony2更新會話和存儲值

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

無效會議...刷新用戶對數據庫做一個重定向(相同的URL)。

除此之外,我有一種機制可以在轉發和在'轉發'模板中顯示此數據之前在會話中存儲一些信息。

兩個對自己工作得很好,卻不能在一起:-)

我可以看到,該值被寫入(在會話失效後),我相信,symfony的實例化一個新的會話。

我只是不知道,之後會發生什麼。也許symfony正在做'一些魔術',因爲它在顯示重定向的url之前'注入'登錄頁面。

+0

也許您需要先登錄才能查看重定向的URL?我想你需要,因爲這是一個編輯用戶信息的頁面。 – Gmajoulet 2013-04-10 09:55:21

+0

是的,當然我必須。我總是重定向到這個對話框中的同一頁面。改變pw之後唯一的區別是,我使會話無效,所以登錄頁面在工作流程中被「注入」。在這種情況下,我的信息沒有顯示,文本被寫入會話,但會話似乎改變(第二次)。 – Sammy 2013-04-11 08:18:01

回答

0

我真的不明白你在做什麼,爲什麼你會使會話無效,但是你的用戶需要登錄才能看到重定向的URL。 您的代碼將他註銷。

你可以這樣做註銷用戶:

use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken; 

$authToken = new UsernamePasswordToken($user, null, 'secured_area', array('ROLE_USER')); 
$this->get('security.context')->setToken($authToken); 

第三個參數是providerKey,第四個是一個角色數組。

+0

用戶註銷,因爲他改變了他的密碼。這導致他在控制器中重定向。重新確認時,我使用會話存儲文本(在這種情況下,會在無效舊會話後存儲該文本!),這比我在重定向視圖上顯示的文本要多。我的問題在於,'注入'登錄屏幕不顯示文本,因爲會話似乎已經改變_again_。 – Sammy 2013-04-11 14:18:12

+0

噢,我明白了。你爲什麼不使用閃光包? http://symfony.com/doc/master/book/controller.html#flash-messages – Gmajoulet 2013-04-12 09:03:02