Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre actif
    serialization Entity User en session (composant Symfony : securité)
    Salut à tous,

    Dans le cadre d'une mise en place de backend à mon site web, je m'intéresse à la couche sécurité de Symfony. J'essaie donc de mettre en place mon UserProvider en fournissant une Entity User. Celle-ci comprend les champs principaux d'un user et implémente bien l'interface UserInterface de Symfony. Par contre, et c'est la où va ce situer mon incompréhension, "j'implémente" également Serializable car je peux lire dans la documentation Symfony cela :

    L'objet User sera sérialisé et sauvegardé dans la session lors des requêtes, il est donc recommandé d'implémenter l'interface Serializable dans votre classe User. Cela est spécialement important si votre classe User a une classe parente avec des propriétés privées.

    http://symfony.com/fr/doc/current/bo.../security.html (la touche d'insertion de lien dans la redaction d'un message ne marche pas cher moi)

    - la sérialisation et la sauvegarde dans la session se font elles automatiquement par Symfony ? Il suffit d'ajouter implements Serializable et laisser les méthodes nouvelles à vide ?
    - Sinon si cette sérialisation n'est pas automatique, comment implémenter la méthode de sérialisation dans l'entité même qu'on souhaite sérialiser ?
    - Ne serait-ce pas plutôt le contrôleur qui doit sérialiser l'objet entity User ?

    Merci de votre éclairage concernant la mise en place de la sécurité par le framework Symfony et en particulier le traitement de l'Entity User par le framework

  2. #2
    Membre habitué
    Bonjour,

    En fait ton entité sera sérialisée dans la session en fonction de ta définition de sérialisation. Il serait idiot de sérialiser toute ton entité (ce qui peut être énorme), au lieu de ça voici comment je sérialise mon user.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
    // Acme/UserBundle/Entity/User
     
        /**
         * @see \Serializable::serialize()
         */
        public function serialize()
        {
            return serialize(array(
                $this->getId(),
                $this->getEmail(),
            ));
        }
     
        /**
         * @see \Serializable::unserialize()
         */
        public function unserialize($serialized)
        {
            list (
                $this->id,
                $this->email,
                ) = unserialize($serialized);
        }



    Ainsi le contexte de sécurité va à chaque requête désérialiser mon entité et faire la requête de sélection en BDD de mon user basé sur le champs email.

  3. #3
    Membre actif
    effectivement la sérialisation se fera bien automatique par le composant Security de Symfony.
    Ce qui planchait et me donner des incompréhension était le fait que je "codais" mal mes données en base de données.
    Ainsi la déserialisation était bien effectué mais fausse pour ce qui concernait les roles de mes utilisateurs.
    Donc je me suis amené a regardé tu coté de la serialisation/deserialisation pour m'apercevoir de cela.

    Merci damiensan pour tes precisions

  4. #4
    Membre à l'essai
    Moi ca me pose problème, a la base je veut rajouter une image sur mon utilisateur et comme on ne peut pas serialiser une image j'ai implementer serializable , mais du coup je peut plus me connecter , donc j'ai quand même l'impression que sa casse quelque chose de redefinir ses méthodes :/.