Symfony2 обновляет сеанс и сохраняет значение

Мои пользователи могут менять свои пароли в форме. Если эта форма действительна, я ее кодирую, аннулирую сеанс, используя

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

... сбросить пользователя в базу данных и выполнить перенаправление (на тот же URL-адрес).

Кроме того, у меня есть механизм для хранения некоторой информации в сеансе перед пересылкой и отображением этих данных в шаблоне «переадресовано».

Оба хорошо работают сами по себе, но не вместе :-)

Я вижу, что значение записывается (после аннулирования сеанса), и я считаю, что symfony создает новый сеанс.

Я просто не знаю, что происходит после этого. Возможно, symfony творит «какое-то волшебство», потому что «вводит» страницу входа в систему, прежде чем показывать перенаправленный URL.


person Sammy    schedule 10.04.2013    source источник
comment
Может быть, вам нужно войти в систему, чтобы просмотреть URL-адрес перенаправления? Я думаю, вам нужно, потому что это страница для редактирования информации о пользователе.   -  person Gmajoulet    schedule 10.04.2013
comment
Да, конечно, я должен. Я всегда перенаправляю на одну и ту же страницу в этом диалоговом окне. Единственная разница после изменения pw заключается в том, что я аннулирую сеанс, поэтому страница входа «вводится» в рабочий процесс. В этом случае моя инфа не показывается, текст пишется в сессию, но сессия как будто меняется (второй раз).   -  person Sammy    schedule 11.04.2013


Ответы (1)


Я действительно не понимаю, что вы пытаетесь сделать и почему вы аннулируете сеанс, но ваш пользователь должен войти в систему, чтобы увидеть перенаправленный 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, а четвертый — массив ролей.

person Gmajoulet    schedule 11.04.2013
comment
Пользователь вышел из системы, потому что он изменил свой пароль. Это приводит к перенаправлению его в контроллер. При перенаправлении я использую сеанс для хранения текста (в данном случае он сохраняется после аннулирования старого сеанса!), который я отображал в перенаправленном представлении. Моя проблема заключается в том, что «внедренный» экран входа в систему не отображает текст, потому что сеанс, похоже, изменился снова. - person Sammy; 11.04.2013
comment
Ок, я вижу. Почему бы тебе не использовать флешку? symfony.com/doc/master/book/controller.html#flash- сообщения - person Gmajoulet; 12.04.2013