IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Symfony PHP Discussion :

[FOSUserBundle] Mot de passe non crypté [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Points : 49
    Points
    49
    Par défaut [FOSUserBundle] Mot de passe non crypté
    Bonjour,

    Lors de la création d'un utilisateur j'essaie de crypter les mots de passe sans succès au travers du bundle FOSUserBundle.
    Il est ensuite impossible de se connecter avec le mot de passe créé en clair. Pas de pb si le user est créé par ligne de commande.

    Security dans app/config:

    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
    imports:
      - { resource: "@LdbUserBundle/Resources/config/security.yml" }
     
    security:
     
        role_hierarchy:
            ROLE_ADMIN:       ROLE_USER
            ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
     
        access_control:
            - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
            - { path: ^/admin/, role: ROLE_ADMIN }
            - { path: ^/ajouter/, role: ROLE_ADMIN }
            - { path: ^/voir/, role: ROLE_ADMIN }
            - { path: ^/modifier/, role: ROLE_ADMIN }
            - { path: ^/supprimer/, role: ROLE_ADMIN }


    Security.yml dans le config du bundle

    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
    26
    27
    28
    security:
        encoders:
            Ldb\UserBundle\Entity\User: sha512
     
        providers:
            fos_userbundle:
                id: fos_user.user_provider.username
     
        firewalls:
            dev:
                pattern:       ^/(_(profiler|wdt))
                security:      false
            main:
                pattern:        .*
                anonymous:      true
                provider:       fos_userbundle
                form_login:
                    csrf_provider: form.csrf_provider
                    login_path: fos_user_security_login
                    check_path: fos_user_security_check
                logout:
                    path:       fos_user_security_logout
                    target:     /
                remember_me:
                    key:        %secret% # %secret% est un paramètre de parameters.yml
                    lifetime:   300000000
                    path:       /
                    domain:     ~


    Mon entité 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    namespace Ldb\UserBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Validator\Constraints as Assert;
    use FOS\UserBundle\Entity\User as BaseUser;
     
    /**
     * User
     *
     * @ORM\Table()
     * @ORM\Entity(repositoryClass="Ldb\UserBundle\Entity\UserRepository")
     */
    class User extends BaseUser
    {
     
     
    	/**
    	* @ORM\OneToMany(targetEntity="Ldb\CommentBundle\Entity\Comment", mappedBy="user", cascade={"remove"})
       	* @ORM\OrderBy({"createdat" = "DESC"}) 
    	*/
    	private $comments; // Ici commentaires prend un « s », car un article a plusieurs commentaires !
     
        /**
         * @var integer
         *
         * @ORM\Column(name="id", type="integer")
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;
     
        /**
         * @var boolean
         *
         * @ORM\Column(name="etiopathe", type="boolean")
         * @Assert\Type(type="bool", message="{{ value }} n'est pas un type {{ type }} valide.")
     
    etc.

    Le form du 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    namespace Ldb\UserBundle\Form;
     
    use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class UserType extends BaseType
    {
            /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('username',			'text', 	array('label' => " ", 'attr' => array('placeholder' => 'Login')))        
    			->add('password',			'text', 	array('label' => " ", 'attr' => array('placeholder' => 'Mot de passe')))
                ->add('nom',				'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Nom')))
                ->add('prenom',				'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Prénom')))
                ->add('email',				'email', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Email')))
                ->add('datenaissance',		'date',		array('label' => " ", 'required' => false, 'widget' => 'single_text', 'format' => 'd/M/y', 'attr' => array('class' => 'date', 'placeholder' => 'Date de naissance', 'data-date-start-view' => 'decade', 'data-date-language' => 'fr')))
                ->add('adresse',			'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Adresse')))
                ->add('codepostal',			'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Code postal')))
                ->add('ville',				'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Ville')))
    			->add('telfixe',			'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Téléphone fixe')))
    			->add('telportable',		'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Téléphone portable')))
            ;
        }
     
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Ldb\UserBundle\Entity\User'
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'ldb_userbundle_user';
        }
    }
    Le form du patient qui étend celui du 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    namespace Ldb\UserBundle\Form;
     
    use Symfony\Component\Form\FormBuilderInterface;
    use Symfony\Component\OptionsResolver\OptionsResolverInterface;
     
    class PatientType extends UserType
    {
            /**
         * @param FormBuilderInterface $builder
         * @param array $options
         */
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
     
            parent::buildForm($builder, $options);
     
            $builder
                ->add('profession',			'text', 	array('label' => " ", 'required' => false, 'attr' => array('placeholder' => 'Profession')))
                ->add('remarque',			'textarea', array('label' => " ", 'required' => false, 'attr' => array('class'=>'input-xlarge','placeholder' => 'Remarque')))
    			->add('antecedent',			'textarea', array('label' => " ", 'required' => false, 'attr' => array('class'=>'input-xlarge','placeholder' => 'Antécédent')))
    			->add('traitement',			'textarea', array('label' => " ", 'required' => false, 'attr' => array('class'=>'input-xlarge','placeholder' => 'Traitement')))
    			->add('mutuelle',			'checkbox', array('label' => "Mutuelle ", 'required' => false))
            ;
        }
     
     
        /**
         * @param OptionsResolverInterface $resolver
         */
        public function setDefaultOptions(OptionsResolverInterface $resolver)
        {
            $resolver->setDefaults(array(
                'data_class' => 'Ldb\UserBundle\Entity\User'
            ));
        }
     
        /**
         * @return string
         */
        public function getName()
        {
            return 'ldb_userbundle_patient';
        }
     
    }

    le services.yml dans le bundle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    services:
    #    ldb_user.example:
    #        class: %ldb_user.example.class%
    #        arguments: [@service_id, "plain_value", %parameter%]
     
         ldb_user.registration.form.type:
            class: Ldb\UserBundle\Form\UserType
            arguments: [%fos_user.model.user.class%]
            tags:
                - { name: form.type, alias: ldb_userbundle_patient }
    Voyez-vous quelquechose qui manque, qui cloche?

    Laurent.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 168
    Points : 219
    Points
    219
    Par défaut
    Dans ton Controller quand tu enregistres l'utilisateur, encodes tu son mot de passe ?

    http://symfony.com/fr/doc/2.4/book/s...-mots-de-passe

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Non je fais un simple bind. Je teste ça ce soir et reviens donner le résultat. Merci de la piste.

    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
    26
    27
        public function ajouterPatientAction()
    	{
     
    		$user = new User;
    		$form = $this->createForm(new PatientType, $user);
     
    		// Récupère la requête
    		$request = $this->getRequest();
     
    	  // Vérifie qu'elle est de type POST
          if ($request->getMethod() == 'POST')
    		{
    			// Lien Requête <-> Formulaire
          		// À partir de maintenant, la variable $patient contient les valeurs entrées dans le formulaire par le visiteur
          		$form->bind($request);
    			if ($form->isValid()){
    				$em = $this->getDoctrine()->getManager();
    				$em->persist($user);
    				$em->flush();
     
    				// Redirige vers la page de visualisation du patient nouvellement créé
    				return $this->redirect($this->generateUrl('ldb_user_voir_patient',array('id' => $user->getId())));
    			}		
     
    		}
    		return $this->render('LdbUserBundle:patient:ajouterPatient.html.twig', array('form' => $form->createView()) );
    	}

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 74
    Points : 49
    Points
    49
    Par défaut
    Merci, c'était bien le manque dans mon code.
    Une fois appelé l'encodeur puis appliqué à mon $user, j'ai utilisé ce code pour le traitement du mot de passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
          if ($request->getMethod() == 'POST')
    		{
    			// On fait le lien Requête <-> Formulaire
          		// À partir de maintenant, la variable $patient contient les valeurs entrées dans le formulaire par le visiteur
          		$form->bind($request);
     
    			if ($form->isValid()){
     
                    $password = $encoder->encodePassword($form->get('password')->getData(), $user->getSalt());
                    $user->setPassword($password);
     
                    $userManager->updateUser($user);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mot de passe non transféré
    Par kogoi dans le forum Langage
    Réponses: 2
    Dernier message: 25/01/2010, 17h24
  2. [OL-2003] Login/Mot de passe non enregistré
    Par juju982002 dans le forum Outlook
    Réponses: 0
    Dernier message: 13/01/2010, 11h36
  3. Out02 Mot de passe non mémorisé
    Par ft035580 dans le forum Outlook
    Réponses: 1
    Dernier message: 22/11/2008, 11h01
  4. Réponses: 0
    Dernier message: 26/03/2008, 15h46
  5. [Htaccess] Mot de passe non reconnu
    Par fragmonster dans le forum Apache
    Réponses: 1
    Dernier message: 28/03/2007, 20h44

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