Connecter un utilisateur eZ depuis un controller

Récemment j’ai rencontré la problématique suivante : créer un nouveau compte utilisateur et le connecter sans action supplémentaire de sa part.

Dans Symfony, pour que notre utilisateur soit connecté il faut fournir un token. Ce token doit être créé à partir d’un objet user qui implémente l’interface Symfony\Component\Security\Core\User\UserInterface. Or l’objet de contenu user retourné par l’API eZ n’implémente pas cette interface.

En cherchant un peu dans les sources d’eZ, on peut voir la classe : eZ\Publish\Core\MVC\Symfony\Security\User qui elle implémente bien UserInterface 🙂 Et comble du luxe, le constructeur de cette classe attend en paramètre un objet de la classe eZ\Publish\API\Repository\Values\User\User. Parfait!

Voici donc une solution simple et rapide :

Comme vous pouvez le voir, vous avez besoin du mot de passe en clair pour faire ça. C’est donc pratique quand vous voulez connecter l’utilisateur juste après son inscription. Vous voyez également que je déclenche l’événement INTERACTIVE_LOGIN. Ce n’est pas obligatoire mais ça permet aux listeners de cet event d’être déclenchés.

Si vous voulez faire les choses proprement, je vous conseille de jeter un œil à l’interface eZ\Publish\Core\MVC\Symfony\Security\Authentication\AuthenticatorInterface. Vous trouverez un exemple d’implémentation dans la classe eZ\Publish\Core\REST\Server\Security\RestAuthenticator et vous verrez au passage que le principe utilisé est le même 😉

Si vous connaissez une meilleure façon de faire, n’hésitez pas!

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *