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
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2007
    Messages : 643
    Points : 280
    Points
    280
    Par défaut 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/book/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é
    Ingénieur d'études et de développement
    Inscrit en
    juin 2009
    Messages
    112
    Détails du profil
    Informations professionnelles :
    Activité : Ingénieur d'études et de développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : juin 2009
    Messages : 112
    Points : 154
    Points
    154
    Par défaut
    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
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mai 2007
    Messages : 643
    Points : 280
    Points
    280
    Par défaut
    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
    Nouveau membre du Club Avatar de fabzyr
    Homme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2018
    Messages : 45
    Points : 29
    Points
    29
    Par défaut
    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 :/.

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/06/2014, 16h57
  2. [1.x] Détection de l'expiration de session en symfony 1.4
    Par adnen07 dans le forum Symfony
    Réponses: 0
    Dernier message: 29/04/2014, 18h19
  3. Réponses: 3
    Dernier message: 28/02/2014, 13h03
  4. Pb pour serializer un item contenant un composant
    Par ed973 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 13/01/2012, 22h18
  5. Interets a serializer un objet en session ?
    Par newbie_php dans le forum Sessions
    Réponses: 4
    Dernier message: 10/01/2010, 17h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo