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

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 156
    Points : 594
    Points
    594
    Par défaut Retrouver un utilisateur d'après son mot de passe haché en base de donnée
    Bonjour,
    J'ai plusieurs utilisateurs qui peuvent avoir la même adresse mail.
    Lorsqu'un utilisateur a perdu son identifiant, je ne peux donc pas utiliser son adresse mail. Je veux pouvoir le lui renvoyer à partir de la saisie de son mot de passe en le comparant avec password_verify. Je ne vois pas de solution sans parcourir toute la base de données et comparer le mot de passe saisi avec chaque mot de passe haché. Comment faire? Y a t-il une solution?

  2. #2
    Expert confirmé Avatar de Séb.
    Profil pro
    Inscrit en
    mars 2005
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mars 2005
    Messages : 3 541
    Points : 4 770
    Points
    4 770
    Par défaut
    Si deux utilisateurs avec le même mail ont utilisé le même mot de passe (ce qui est très probable si ils ont déjà le même mail), alors tu es fichu.

    C'est le moment de revoir tes règles :
    – Le mail est unique en base de données
    – L'utilisateur se connecte avec son mail (souvent c'est bien plus simple)
    – L'utilisateur peut définir un pseudo si nécessaire
    – L'éventuel pseudo est unique en base (ou alors tu le suffixes avec l'ID utilisateur, etc.)
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 156
    Points : 594
    Points
    594
    Par défaut
    En entreprise, le mail peut être commun à un service (exemple: "reception@entreprise.fr"). Les utilisateurs ont un pseudo unique et un mot de passe unique qui les différencient. Mon but ici est de permettre à l'utilisateur qui a perdu son pseudo de le retrouver à partir de son mot de passe.
    S'il n'y a pas de meilleure solution, je pense que je vais faire une boucle pour tester le mot de passe de tous les utilisateurs qui ont le même mail.

  4. #4
    Expert confirmé Avatar de Séb.
    Profil pro
    Inscrit en
    mars 2005
    Messages
    3 541
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mars 2005
    Messages : 3 541
    Points : 4 770
    Points
    4 770
    Par défaut
    En entreprise
    Le sacro-saint argument qui fixe les défaillances dans le marbre et doit les rendre acceptables

    S'il n'y a pas de meilleure solution, je pense que je vais faire une boucle pour tester le mot de passe de tous les utilisateurs qui ont le même mail.
    En arriver à de telles pratiques est signe d'un mauvais design (que je trouve aberrant) et qui ne pourra jamais être pleinement satisfaisant
    Exemple : tu as un service de 10 utilisateurs, tu risques d'en avoir 2 qui utilisent un mot de passe identique comme le nom de la société ou du service
    => Tu ne peux pas les distinguer selon le couple mail-mdp

    Bon, sinon, retrouver un login selon un mail et un mdp :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sql = <<<SQL
        SELECT ALL user_login
        FROM users
        -- HASH() à adapter à ton usage
        WHERE user_email = :email AND user_password = HASH(:password)
        SQL;
    $select = $pdo->prepare($sql);
    $select->execute([':email' => $email, ':password' => $password]);
    $count = $select->rowCount();
    if ($count === 1) {
        $login = $select->fetch(PDO::FETCH_COLUMN);
    } else {
        // Patatra
    }
    Si $count === 1 alors c'est bon, sinon si tu as 0 ou 2 résultats ou plus c'est mauvais (même mdp sur plusieurs utilisateurs ayant le même mail)

    Bon courage,
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Technicien maintenance
    Inscrit en
    août 2011
    Messages
    14 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : août 2011
    Messages : 14 332
    Points : 32 979
    Points
    32 979
    Par défaut
    En entreprise, le mail peut être commun à un service (exemple: "reception@entreprise.fr").
    Comme le disait Seb, si plusieurs utilisateurs peuvent avoir le même mail, tu ne peux pas dans ce cas avoir de lien entre le mail et le pseudo. Ton appli ne doit donc pas autoriser la création de 2 comptes avec la même adresse mail. L'entreprise devra alors créer une adresse mail spécifique à chaque utilisateur, même si elle ne sert qu'à la connexion à l'appli.

    Mon but ici est de permettre à l'utilisateur qui a perdu son pseudo de le retrouver à partir de son mot de passe.
    Très mauvaise pratique, risque de piratage par brute-force. Et aussi si l'utilisateur perd son mot de passe, plus aucun moyen de récupérer le login (par exemple couple login/mot de passe enregistré dans navigateur, et perte du profil du navigateur).
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur la création d'un système : http://chrtophe.developpez.com/tutoriels/minisysteme/
    Mon article sur le P2V : http://chrtophe.developpez.com/tutoriels/p2v/
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 156
    Points : 594
    Points
    594
    Par défaut
    OK, merci Je vais tenir compte de vos remarques.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/06/2018, 13h36
  2. Réponses: 4
    Dernier message: 10/04/2018, 20h48
  3. Réponses: 4
    Dernier message: 30/11/2016, 23h35
  4. [Joomla!] [Joomla 3.4] Si l'utilisateur doit changer son mot de passe
    Par RyzenOC dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 04/08/2015, 10h23
  5. Squid: comment l'utilisateur peut changer son mot de passe?
    Par supInfo22 dans le forum Sécurité
    Réponses: 0
    Dernier message: 16/09/2011, 18h00

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