2013-04-10 4 views
0

Mes utilisateurs peuvent changer leur mot de passe sur un formulaire. Si cette forme est valide j'encoder, la session invalide en utilisantSymfony2 renew Session and store value

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

... rincer à l'utilisateur de la base de données et faire une redirection (à la même URL). A côté de cela, j'ai un mécanisme pour stocker des informations dans la session avant de les transférer et d'afficher ces données dans le modèle «transféré».

Les deux fonctionnent bien eux-mêmes, mais pas ensemble :-)

je peux voir, que la valeur est écrite (après la session invalidant) et je crois que symfony instancie une nouvelle session. Je ne sais tout simplement pas ce qui se passe après cela. Symfony fait peut-être un peu de magie car il injecte la page de connexion avant de montrer l'URL redirigée.

+0

Peut-être que vous devez être connecté pour voir l'URL redirigé? Je suppose que vous devez, car c'est une page pour modifier les informations de l'utilisateur. – Gmajoulet

+0

Oui, bien sûr que je dois. Je redirige toujours vers la même page dans cette boîte de dialogue. La seule différence après avoir changé le pw est que j'invalide la session, ainsi la page de connexion est "injectée" dans le workflow. Dans ce cas, mes infos ne sont pas affichées, le texte est écrit en session, mais la session semble changer (une 2ème fois). – Sammy

Répondre

0

Je ne comprends pas vraiment ce que vous essayez de faire, et pourquoi vous invalidez la session, mais votre utilisateur doit être connecté pour voir l'URL redirigée. Votre code le déconnecte.

Vous pouvez vous connecter un utilisateur en le faisant:

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

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

Le troisième paramètre est le ProviderKey, et le quatrième est un tableau de rôles.

+0

L'utilisateur est déconnecté, car il a changé son pw. Cela conduit à le rediriger dans le contrôleur. Lors de la rediffusion, j'utilise la session pour stocker un texte (dans ce cas, il est stocké après l'invalidation de l'ancienne session!), Que ce que j'ai affiché sur la vue redirigée. Mon problème ici est que l'écran de connexion 'injecté' n'affiche pas le texte, car la session semble avoir changé _again_. – Sammy

+0

Oh ok je vois. Pourquoi n'utilisez-vous pas le flashbag? http://symfony.com/doc/master/book/controller.html#flash-messages – Gmajoulet