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 :

envoyer un mot de passe hash par email [1.x]


Sujet :

Symfony PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut envoyer un mot de passe hash par email
    Bonjour,

    je souhaite envoyer par e-mail les identifiants (login/pass) des comptes que e créé via le formulaire new.

    J' ai donc crée la fonction executeCreate() dans action.class de mon module admin et que j' appel depuis la fonction suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function executeCreate(sfWebRequest $request)
      {
        $this->form = $this->configuration->getForm();
        $this->customer = $this->form->getObject();
    
        $this->processForm($request, $this->form);
    
        $this->setTemplate('new');
        $this->executeNotifyCustomer();
      }
    J' ai modifié la factories.yml de mon module comme indiqué :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    dev:
      mailer:
        param:
          delivery_strategy: realtime


    Pb1 : Aucun mail ne part. pas d' erreur
    Pb2 : comment récupérer le mot de passe dans le message avant qu' il ne soit hashé ? getPasswd () ?

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Je ne comprend rien à ce que tu racompte...

    Tu parles d'un mail, mais pas de code pour envoyer un mail, ni de variable passe, ni de nom, ni d'email...

    Et si tu envoies le mot de passe en hash... c'est pas gagné pour l'utilisateur pour ce connecté, vu que le hash est sensé ne pas pouvoir être décodé...

    Je propose que tu exposes ce aut tu veux faire (pas de code), les plugins que tu veux utiliser.

    Après, on va bien voir où on va.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    ok merci de ton aide, alors voila :

    Dans un premier temps.

    Je veux envoyer par e-mail le login/pass du user que je crée depuis mon module d' admin (formulaire new)

    Comme c' est la première fois que j' utilise les fonctions mail de symfony, je galère pour le mettre en place.

    J' ai fais plusieurs tests, j' ai réussi a déclencher 2 fois un e-mail simple mais depuis je bloque.

    1) Peut tu m' aider à utiliser simplement swiftmail depuis une action basique ?
    2) Comment récupérer le pass avant qu' il ne soit hashé et donc stocké en base ?

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Donc tu veux que l'utilisateur puisse créer un compte et le confirmer par mail.

    Le mieux serait d'utiliser deux plugins qui vont faire le travail pour toi :
    sfDoctrineGuardPlugin et
    sfForkedDoctrineApplyPlugin

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Non non, lorsque j' ajoute un nouvel utilisateur, je veux que son login/pass soit envoyé par e-mail.

    J' utilise déja sf_guard que j' ai hérité pour mes modèles customer et consultant.

    Ce n' est pas eu qui crée leur compte. Ils ont juste besoin de récupérer leur login/pass une fois que le compte est crée.

    C' est assez simple. Le mail doit partir à la validation du formulaire de création du compte.

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Donc, tu as un administrateur qui renseigne le login, le nom, le prénom, l'email et un passe.

    Et tu veux l'envoyer directement en mail.

    Tu aurais peut-être intérêt à créer un module spécifique, voir un form spécifique, dérivé des form de sfGuard avec deux actions, une pour créer, une pour réinitialisé le mot de passe.

    Dans les deux cas, tu implémentes, avant la sauvegarde une méthode qui crée le mot de passe aléatoirement, non connu de l'admin et l'envoie par email.

    Ce qui est dommage c'est que l'on ai pas, dans sfGuard, la possibilité de forcer un utilisateur à changer de mot de passe.

    Est-ce que cela pourrait aller ?

    Si oui, il faut voir où implanter cette méthode, faut bien y réfléchir. C'est pas aussi simple que cela. Dis moi déjà si c'est, en gros, ce qui te conviens, je vais réfléchir à où implémenter le code.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Oui j' ai bien fait cela j' ai 1 module consultant et 1 module customer dérivé de la classe sf_guard_user ce qui me permet de mettre en commun les champs login/pass/username etc..

    Seulement a chaque fois q' un admin crée un nouveau client ou assistant, je voudrai qu un e-mail partent vers le client ou assistant.

    Je ne comprends pas trop quand tu dis "crée le mot de passe aléatoirement, non connu de l'admin et l'envoie par email."

    Les mots de passe sont saisies par l' admin et stockés dans la table sf-guard_user.. donc voila..


    En d'autre terme pourquoi c' est aussi complique de récupérer le champs password dans la formulaire de création et de traiter à part pour l'envoyer ensuite par e-mail.

    je me pose de plus en plus de question et mon projet n' avance pas il recule....

  8. #8
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Parce que, dans une application bien faite, l'administrateur ne doit JAMAIS avoir connaissance du mot de passe de l'utilisateur.

    Parce que, en tant qu'administrateur, je REFUSE de connaitre le moindre mot de passe d'un utilisateur.

    Si j'ai réellement besoin de rentrer sur son compte, je peux toujours changer son passe et y entrer, et lui, il sait que j'y suis entré.

    A partir de là, à toi de voir.

    sfGuard stock les mots de passe de manière que l'administrateur n'aie pas la possibilité de les connaître.

    C'est pourquoi, c'est un rien complique, mais beaucoup plus sur.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Oui j' entends bien et sur le principe, je suis de ton avis mais dans ce cas précis, c' est un peu différent il faut bien que les utilisateurs est leur mot de passe en clair à un moment car ce n' est pas eux qui vont créer leur compte et comme le mode de création est par formulaire...

    Dans un premier temps, j' aimerai que l' envoi de mail fonctionne dès que le formulaire création est validé.

    Le code est dans les posts précédents, je me suis inspiré du projet jobeet.

  10. #10
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Ben j'entends bien...

    Mais rien n'empêche de générer le mot de passe par une routine (qui risque moins de mettre un 'titi' ou un '12345' a tous les users) et de l'envoyer.

    Donc, tu crée un form, inspiré du form de sfGuard, qui va demander les champs nécessaire à la création, sauf le mot de passe. Quant le form revient valide, tu vas passer par une méthode a créer, qui va te générer un mot de passe. Puis, tu va créer un enregistrement sfGuardUser et lui entrer les données. Et pour terminer, générer un message avec swift mailer pour envoyer le tout à l'utilisateur.

    Ainsi, ton admin ne vois jamais le mot de passe.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Donc, tu crée un form, inspiré du form de sfGuard, qui va demander les champs nécessaire à la création, sauf le mot de passe. Quant le form revient valide, tu vas passer par une méthode a créer, qui va te générer un mot de passe. Puis, tu va créer un enregistrement sfGuardUser et lui entrer les données. Et pour terminer, générer un message avec swift mailer pour envoyer le tout à l'utilisateur.

    Ainsi, ton admin ne vois jamais le mot de passe.
    Et comment tu fais tout cela ? je précise que les form utilisés pour la saisie ne sont pas ceux de sf_guard mais ceux des modules d' admin que j' ai généré pour les customers et les consultants.

    Déjà peut tu me rassurer en m' indiquant comment déclencher mon mail correctement en récupérant juste 2/3 choses (fistname, lastname).

    Plus les actions sont simple, plus elle sont facile à comprendre..

    Merci de ton aide.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Bon avec un peu de debut, je m' appercois que le mail est bien envoyé si j' appel la fonction executeNotifyCustomer() au début de la fonction executeCreate(), mais tout le reste du code est ignoré.

    Pourquoi ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    public function executeCreate(sfWebRequest $request)
      {
        $this->executeNotifyCustomer();
        $this->form = $this->configuration->getForm();
        $this->customer = $this->form->getObject();
    
        $this->processForm($request, $this->form);
    
        $this->setTemplate('new');
       
      }

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    J' ai trouvé.. .

    Il faut passer par la fonction processForm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    try {
            $customer = $form->save();
            $this->sendNotifybymail();
    // Reste à faire
    Récupérer les variables postées dans le formulaire dont ce foutu mot de passe en clair...

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    C' est ok j' ai trouvé, en me souvenant qu' un formulaire de contact mail ne fait que passer des variables d' un formulaire dans un mail.

    J' ai trouve la fonction getValue() pour faire ce que je cherché depuis le début.

    Voici donc ma fonction qui me permet de récupérer le mot de passe tel qu' il est saisie une fois le formulaire new validé et l'envoyé par e-mail à la personne concernée.

    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
     
    public function sendNotifybymail()
     
      {
       $customer = $this->form->getValues();
       $email = $customer['email_address'];
       $username = $customer['username'];
       $password = $customer['password'];
     
      $message = Swift_Message::newInstance()
              ->setFrom(sfConfig::get('mailbot', 'from@noreply.com'))
              ->setTo($email)
              ->setSubject($username)
              ->setBody($password)
            ;
     
            $this->getMailer()->send($message);
     
      }

    Il doit bien y avoir un moyen de refactorisé ceci, mais pour l' instant cela fonctionne... oufff !!!

  15. #15
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    C'est là où j'aurais inséré une génération de mot de passe automatique pour que l'admin n'en ai pas connaissance.

    Mais chacun sa vision.

    Il ne qu'à mettre un et tout le sera !

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Par contre tout ceci était sous cache/backend/dev/modules/autoCustomer/actions/actions.class.php

    Et au cc qui a suivi j' ai tout perdu.

    Comment le rendre persistent ?

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 28
    Par défaut
    Comment peux tu bosser dans le dossier /cache?

    Symfony génère des fichiers cache pour optimiser le traitement... Tu ne devrait normalement jamais bosser dans le dossier /cache

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    212
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 212
    Par défaut
    Ooui en fait c ' est bon j' ai surchargé les fonctions du admin générateur sous /apps/backend/modules/nomdumodule/actions.class.php en y ajoutant ma fonction qui envoi le mail.

    Merci au google group symfony fr .

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 25/04/2011, 18h56
  2. envoyer un mot de passe oublié par e_mail
    Par anaaa dans le forum Struts 1
    Réponses: 6
    Dernier message: 15/06/2007, 11h21
  3. Demande de mot de passe repété par Interbase
    Par sondo dans le forum Bases de données
    Réponses: 6
    Dernier message: 14/07/2006, 10h28
  4. [Sécurité] [login membre] mot de passe hashé
    Par july dans le forum Langage
    Réponses: 24
    Dernier message: 02/06/2006, 15h19
  5. Modification mot de passe Linux par Dephi?
    Par nmathon dans le forum Langage
    Réponses: 1
    Dernier message: 12/08/2005, 20h04

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