Envoyer le mot de passe de l'utilisateur par courrier


20

Je souhaite envoyer un e-mail de rappel aux utilisateurs pour se connecter à mon site Web avec leur nom d'utilisateur et leur mot de passe. Mon script de messagerie est prêt avec l'ID de connexion, mais je ne sais pas comment décrypter le mot de passe de l'utilisateur.

Quelqu'un peut-il me dire comment obtenir le mot de passe associé à un compte d'utilisateur?

Réponses:


31

Vous ne pouvez pas obtenir le mot de passe de l'utilisateur à partir de ce que Drupal enregistre dans la base de données. Drupal ne crypte pas le mot de passe et l'enregistre dans la base de données, mais il enregistre dans la base de données le hachage du mot de passe, qui est la valeur renvoyée par une fonction à sens unique; cela signifie qu'il n'est pas possible de calculer la valeur à l'origine du hachage.
C'est la raison pour laquelle les hachages sont enregistrés à la place des mots de passe: si quelqu'un accède à la base de données utilisée par un site Drupal, il n'est pas possible de récupérer les mots de passe et d'accéder à ce site en tant qu'un des utilisateurs enregistrés sur ce site. (Il pourrait toujours être possible de trouver un mot avec exactement le même hachage; jusqu'à présent, les attaques par collision ne sont possibles en peu de temps qu'avec MD5.)

Drupal est capable d'envoyer un e-mail pour réinitialiser le mot de passe d'un utilisateur, ce qui n'est pas ce que vous demandez, mais il pourrait être utile si vous souhaitez que les utilisateurs réinitialisent leur mot de passe après X mois. Dans ce cas, vous pourriez être intéressé par le code utilisé par _user_mail_notify () .

  // By default, we always notify except for canceled and blocked.
  $default_notify = ($op != 'status_canceled' && $op != 'status_blocked');
  $notify = variable_get('user_mail_' . $op . '_notify', $default_notify);
  if ($notify) {
    $params['account'] = $account;
    $language = $language ? $language : user_preferred_language($account);
    $mail = drupal_mail('user', $op, $account->mail, $language, $params);
    if ($op == 'register_pending_approval') {
      // If a user registered requiring admin approval, notify the admin, too.
      // We use the site default language for this.
      drupal_mail('user', 'register_pending_approval_admin', variable_get('site_mail', ini_get('sendmail_from')), language_default(), $params);
    }
  }

4
Oui, c'est une pratique de sécurité normale pour tous les systèmes multi-utilisateurs. Drupal utilise des URL de connexion uniques pour réinitialiser le mot de passe. Cela signifie que les utilisateurs n'obtiennent pas leurs mots de passe bruts, mais obtiennent un lien spécial pour se connecter et en définir un nouveau. Une URL de connexion unique peut être trouvée dans le jeton [user:one-time-login-url].
kalabro

15

S'il vous plaît! Ne fais pas ça!

La mise en œuvre d'un système de connexion sur une application Web est facile. La mise en œuvre d'un système de connexion sécurisé sur une application Web est une tout autre affaire. Il y a de nombreux aspects et détails à considérer, et Drupal fait un excellent travail pour traiter à peu près tous ces aspects hors de la boîte.

L'ajout de la fonctionnalité demandée réduirait considérablement la sécurité de votre application. Si vous pouvez décrypter les mots de passe, vous venez de supprimer votre application d'une mesure de sécurité très importante.

D'autres réponses expliquent les solutions de contournement, la réponse de BetaRide ferait ce que vous demandez, mais sachez que je suis totalement d'accord avec sa déclaration finale.

D'une manière très générale, j'aborderais probablement cela plus ou moins de la manière suivante:

Dans un module personnalisé

  1. Implémentez hook_cron , cela créerait un tableau contenant tous les e-mails qui correspondent aux critères de votre choix.

  2. Parcourez le tableau et envoyez les e-mails via drupal_mail. _user_mail_notify() Examinez la fonction liée à kiamlaluno ci-dessus.

Si l'utilisateur ne s'est jamais connecté, vous devrez peut- être envoyer un e-mail de réinitialisation du mot de passe (pas sûr ici), en utilisant éventuellement une combinaison de drupal_mail et hook_mail_alter pour personnaliser l'enregistrement ou l'e-mail de réinitialisation du mot de passe à votre goût.

J'espère que cela aide, je sais que c'est un peu sommaire car je n'ai pas mis en œuvre quelque chose de similaire dans mon expérience Drupal jusqu'à présent, je donnais juste quelques idées sur la façon dont on pouvait informer les utilisateurs de manière sécurisée. Il existe de nombreuses alternatives à la présence d'un mot de passe en texte brut dans l'e-mail.

Bonne chance ami, bravo à toi et bonne année!


2
La première phrase de cette réponse doit être soulignée en gras 16 points, et est peut-être l'un des rares endroits où la balise clignotante aurait pu être appropriée.
Omnifarious

9

Vous pouvez utiliser le module de cryptage AES pour obtenir des mots de passe lisibles.

Cependant, il existe de très bonnes raisons pour lesquelles les mots de passe ne sont pas lisibles dans Drupal standard. À mon humble avis, l'utilisation des liens pw-recovery intégrés à sens unique est beaucoup plus sûre.


0

Vous pouvez utiliser le module de jeton de mot de passe du compte pour envoyer le mot de passe par courrier

Projet expérimental

Il s'agit d'un projet sandbox , qui contient du code expérimental à l'usage exclusif des développeurs.

Ce petit module fournit un jeton de mot de passe de compte utilisateur pour les paramètres de messagerie du compte. L'administrateur du site a autorisé l'envoi du mot de passe à l'utilisateur dans les paramètres ci-dessous: -

  1. Bienvenue (nouvel utilisateur créé par l'administrateur)
  2. Bienvenue (aucune approbation requise)
  3. Activation de compte
  4. Bienvenue (aucune approbation requise, mot de passe défini)
  5. Récupération de mot de passe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.