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 :

Formulaire de connexion


Sujet :

Symfony PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut Formulaire de connexion
    Bonjour,

    Je viens vers vous, car je suis bloquer sur un formulaire de connexion. Quoi que je saisie, j'ai toujours le message "Bad credentials" Hors dans ma base de données. J'ai bien des valeurs. Et je ne trouve pas mon erreur si quelqu'un peut m'éclairer.

    Mon controller:
    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
    49
    <?php
     
    namespace test\FrontBundle\Controller;
     
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
    use Symfony\Component\Security\Core\SecurityContext;
     
     
    class LoginController extends Controller
    {
        /**
         * @Route("/login", name="_security_login")
         * @Template()
         */
        public function loginAction()
        {
            // ON récupère les erreurs d'authentification si le formulaire a été passé avec de mauvaises informations
            if ($this->get('request')->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
                $error = $this->get('request')->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
            } else {
                $error = $this->get('request')->getSession()->get(SecurityContext::AUTHENTICATION_ERROR);
            }
     
            return $this->render('testFrontBundle:Login:login.html.twig', array(
                // On envoie à notre vue le login qu'a saisi l'utilisateur précédemment
                'dernier_utilisateur' => $this->get('request')->getSession()->get(SecurityContext::LAST_USERNAME),
                // Et les erreurs qu'il y a eut lors de la validation du formulaire
                'erreur'         => $error,
            ));
        }
     
    /**
     * @Route("/login_check", name="/login_check")
     */
        public function loginCheckAction(){
            return true;
        }
     
        /**
         * @Route("logout")
         */
        public function logoutAction(){
     
        }
    }
     
    ?>
    Entity:

    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
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
     
    namespace test\FrontBundle\Entity;
     
    use Doctrine\ORM\Mapping as ORM;
    use Symfony\Component\Security\Core\User\UserInterface;
     
    /**
     * @ORM\Entity()
     */
    class Utilisateur implements UserInterface
    {
      /**
       * @ORM\Column(name="id", type="integer")
       * @ORM\Id
       * @ORM\GeneratedValue(strategy="AUTO")
       */
      private $id;
     
      /**
       * @ORM\Column(type="string",unique=true)
       */
      private $username;
     
      /**
       * @ORM\Column(type="string")
       */
      private $password;
     
      public function getId(){
         return $this->id;
      }
     
    public function getUsername(){
         return $this->username;
      }
     
    public function setUsername($value)
        {
            $this->username = $value;
        }
     
     public function getPassword(){
         return $this->password;
      } 
     
    public function setPassword($value)
      {
        $this->password = $value;
      }
     
    public function getRoles(){
         return array('ROLE_USER');
      }
     
      public function getSalt() {
          return null;
      }
      public function eraseCredentials()
      {
      }
     
    }
    Le routing:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    login:
        pattern:   /login
        defaults:  { _controller: testFrontBundle:Login:login }
     
    # Cette route sera gérée automatiquement par symfony, il faut juste la déclarer
    login_check:
        pattern: /login_check
     
    # Cette route sera gérée automatiquement par symfony, il faut juste la déclarer
    logout:
           pattern: /logout
    Merci de votre grande aide.

    Vincent

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    une petite erreur assez classique c'est sur la colonne password en base de donnée qui dois avoir un varchar d'au moins 256 (si moins, le password peut être tronqué)

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut
    Merci beaucoup de la réponse. J'ai tester avec un varchar de 500 et ceci ne change pas.

    Cordialement,

    Vincent

  4. #4
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Es ce que tu as verifié dans le fichier security que le mot de passe dans la base correspond à ton password crypté par le " encoders " ?

  5. #5
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut
    Merci de ta réponse, mais comment vérifier du coup? Je ne comprend pas.

    J'ai ceci dans mon security:
    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
     
    # To get started with security, check out the documentation: 
    # http://symfony.com/doc/current/book/security.html 
    security:
        encoders:
            test\FrontBundle\Entity\Utilisateur: plaintext
     
        providers:
            main:
              entity: { class: testFrontBundle:Utilisateur, property: username }
     
        firewalls:           
     
            secured_area:
                pattern:    ^/
                anonymous: ~
                form_login:
                    login_path: /login
                    check_path: /login_check
                logout:
                    path:   logout
                    target: index
     
        access_control:
            - { path: ^/admin, roles: ROLE_ADMIN }

  6. #6
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    tu utilise l'encoder plaintext pour tes mots de passe .
    si tu peux accéder à la base . Essaie avec le mots de passe tel qu'il est dans la base

  7. #7
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut
    Merci beaucoup. Effectivement ceci fonctionne quand je met le mot de passe crypté dans mon champ password.

    Donc si je comprend bien il faut que je récupère le mot de passe de mon formulaire en crypté.

  8. #8
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    si tu n'utilises pas fosUserBundle tu dois t'occuper du cryptage....

  9. #9
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut
    Merci beaucoup, mais je ne vois où gérer mon cryptage. Désolé. Je dois le gérer dans mon entity utilisateur?

    Cordialement,

    Vincent

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2013
    Messages
    739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2013
    Messages : 739
    Points : 1 022
    Points
    1 022
    Par défaut
    Bien, faisons de la découverte alors .
    Sous vendor , regarde selon cette arborescence " Symfony\Component\Security\Core\Encoder ".
    tu va trouver plusieurs encoders comme sha512 ..
    Le encoder pris en compte lors de l'authentification doit être défini comme ici http://symfony.com/doc/current/refer.../security.html
    Si tu veux créer ton propre algorithme de cryptage , tu dois implémenter l'interface PasswordEncoderInterface et bien sur déclarer ton nouveau encoder dans le security.yml
    L'authentification se fait lorsque le mot de passe inséré dans le formulaire et encodé ( par un algorithme x ) correspond à la chaîne de caractère dans la bdd ( encodé précédemment )

  11. #11
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut
    Merci pour tes réponses. J'ai donc pris l'encoders sha512:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    security:
        encoders:
            test\FrontBundle\Entity\Utilisateur: sha512
    Mon mot de passe est bien encodé en sha512 dans la base de données. Mais il doit bien me manquer quelques choses parce que cela ne veut pas fonctionner?

  12. #12
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    lors de la connexion ton password est en clair.

    etant donné que le password est en clair d'un coté (formulaire de connexion) et crypté en sha512 donc de l'autre en base.

    c'est évident que tu ne peux pas comparer donc .... devine ce qu'il faut faire ?

  13. #13
    Membre habitué
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 275
    Points : 152
    Points
    152
    Par défaut
    Oui j'ai compris, il faut le crypté au moment du submit de mon formulaire. Maintenant dois-je faire le cryptage dans le setter password ou dans mon form?

Discussions similaires

  1. Formulaire de connexion qui ne connecte pas
    Par Lexion71 dans le forum Langage
    Réponses: 3
    Dernier message: 28/12/2007, 19h41
  2. Formulaire de connexion
    Par Interface dans le forum Langage
    Réponses: 6
    Dernier message: 21/09/2007, 15h06
  3. formulaire de connexion ne fonctionne pas
    Par masterix59 dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2007, 01h31
  4. formulaire de connexion utilisateurs
    Par lucienkany dans le forum Access
    Réponses: 1
    Dernier message: 02/07/2007, 23h45
  5. PB Utilisation formulaire de connexion
    Par stan314 dans le forum Access
    Réponses: 2
    Dernier message: 25/05/2006, 13h59

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