Problème déconnexion automatique changement de rôle symfony

AnonymousX
Invité n'ayant pas de compte PHPfrance

23 juin 2022, 21:30

Bonjour,

Je cherche à empêcher la déconnexion automatique lorsqu'un nouveau rôle est attribué à un utilisateur sur Symfony 6. J'ai lu plusieurs choses mais rien ne fonctionne...

Avez-vous un script ou quelque chose permettant d'éviter ce problème ?

Merci d'avance pour votre aide !

ynx
Mammouth du PHP | 586 Messages

24 juin 2022, 12:01

Bonjour,

Il y a une discussion à ce sujet sur le dépôt de Symfony : https://github.com/symfony/symfony/issues/39763

A priori la solution serait, lors du changement de rôle, de créer un nouveau UsernamePasswordToken à mettre à jour dans le TokenStorage.

AnonymousX
Invité n'ayant pas de compte PHPfrance

24 juin 2022, 21:31

Bonjour et merci pour ta réponse. J'ai déjà vu cette discussion le problème c'est que lorsque que j'utilise la méthode setToken celle-ci nécessite 2 paramètres et dans tout les exemples utilisant cette méthode tout le monde utilise qu'un seul paramètre mais moi impossible de fonctionner...
J'ai du louper quelque chose je ne comprend vraiment pas !

ynx
Mammouth du PHP | 586 Messages

25 juin 2022, 09:36

Es-tu sûr d'utiliser la méthode setToken du service TokenStorage ? Cette méthode attend un seul paramètre : https://github.com/symfony/security-cor ... torage.php

Tu dois pouvoir récupérer ce service avec un paramètre typé TokenStorageInterface dans la méthode de ton contrôleur ou dans son constructeur.
Un exemple d'utilisation de ce service dans un contrôleur : https://github.com/FriendsOfSymfony/FOS ... roller.php

AnonymousX
Invité n'ayant pas de compte PHPfrance

25 juin 2022, 12:37

Merci beaucoup effectivement je n'utilisais pas la bonne class... Ça marche parfaitement c'est top !

Je profite du sujet (pour ne pas en ouvrir un autre) pour savoir comment faire pour forcer la déconnexion d'un utilisateurs ? Non pas en faisant un redirect sur le path correspondant à la déconnexion mais pouvoir le faire manuellement ? La seule chose que je fais c'est le cookie PHPSESSID mais je me doute que ce n'est pas optimal ni forcément sécurisé. Est-ce qu'il y a une manière de faire ça proprement avec Symfony ?

ynx
Mammouth du PHP | 586 Messages

25 juin 2022, 18:17

Pour déconnecter manuellement l'utilisateur, tu peux définir le token à la valeur null avec la même méthode setToken() puis faire une redirection.
C'est ce que fait le LogoutListener pour la route logout par défaut :
https://github.com/symfony/symfony/blob ... stener.php

Il y a justement une PR ouverte à ce sujet pour avoir une méthode logout() dans Symfony :
https://github.com/symfony/symfony/pull/41406