通过邮件发送用户密码


20

我想向用户发送提醒电子邮件,以使用他们的用户名和密码登录我的网站。我的邮件脚本已准备好登录ID,但是我不知道如何解密用户密码。

谁能告诉我如何获取与用户帐户关联的密码?

Answers:


31

您无法从Drupal保存在数据库中的内容中获取用户密码。Drupal不会加密密码并将其保存在数据库中,但是会将密码的哈希值(即单向函数返回的值)保存在数据库中。这意味着无法计算源自哈希的值。
这就是为什么保存哈希而不是密码的原因:如果有人访问Drupal站点使用的数据库,则无法检索密码,并以在该站点中注册的用户之一的身份访问该站点。(仍然有可能找到具有完全相同的散列的单词;到目前为止,仅使用MD5才可能在短时间内显示出碰撞攻击。)

Drupal能够发送电子邮件以重置用户密码,这不是您所要求的,但是如果您希望用户在X个月后重置密码,这可能会有所帮助。在这种情况下,您可能会对_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
是的,这是所有多用户系统的正常安全做法。Drupal使用一次登录URL重置密码。这意味着用户不会获得其原始密码,而是会获得用于登录并设置新密码的特殊链接。可以在token中找到一次登录URL [user:one-time-login-url]
kalabro 2011年

15

请!不要那样做!

在Web应用程序上实现登录系统很容易。在Web应用程序上实施安全登录系统是完全不同的事情。有很多方面和细节需要考虑,Drupal可以很好地处理几乎所有这些方面。

添加您要求的功能将大大降低应用程序的安全性。如果您可以解密密码,那么您已经剥夺了应用程序非常重要的安全性。

其他答案解释了变通办法,BetaRide的答案将满足您的要求,但请注意,我完全同意他的总结声明。

一般来说,我大概会以以下方式解决此问题:

在自定义模块中

  1. 实现hook_cron,这将构建一个包含所有符合您选择的条件的电子邮件的数组。

  2. 遍历数组并通过drupal_mail发送电子邮件。请查看_user_mail_notify() 上面链接的kiamlaluno 函数。

如果用户从未登录过,则可能需要发送重置密码邮件(此处不确定),可能使用drupal_mailhook_mail_alter的组合来根据您的喜好自定义注册或重置密码电子邮件。

希望能有所帮助,因为到目前为止我还没有实现与Drupal相似的功能,所以我知道这有点粗略,我只是想出一些想法来了解如何以安全的方式通知用户。在电子邮件中使用纯文本密码有很多选择。

祝你好运的朋友,为您加油,新年快乐!


2
这个答案的第一句话需要以16pt粗体字强调,并且可能是眨眼标记可能适用的少数几个地方之一。
2012年

9

您可以使用AES加密模块来获取可读的密码。

但是,有充分的理由说明为什么标准Drupal无法读取密码。恕我直言,使用内置的一种pw-recovery链接更为安全。


0

您可以使用帐户密码令牌模块在邮件中发送密码

实验项目

这是一个沙盒项目,其中包含仅供开发人员使用的实验代码。

这个小模块为帐户电子邮件设置提供用户帐户密码令牌。网站管理员允许在以下设置中向用户发送密码:-

  1. 欢迎(管理员创建的新用户)
  2. 欢迎(无需批准)
  3. 帐号激活
  4. 欢迎(无需批准,已设置密码)
  5. 找回密码
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.