Answers:
您无法从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);
}
}
请!不要那样做!
在Web应用程序上实现登录系统很容易。在Web应用程序上实施安全登录系统是完全不同的事情。有很多方面和细节需要考虑,Drupal可以很好地处理几乎所有这些方面。
添加您要求的功能将大大降低应用程序的安全性。如果您可以解密密码,那么您已经剥夺了应用程序非常重要的安全性。
其他答案解释了变通办法,BetaRide的答案将满足您的要求,但请注意,我完全同意他的总结声明。
一般来说,我大概会以以下方式解决此问题:
在自定义模块中
实现hook_cron,这将构建一个包含所有符合您选择的条件的电子邮件的数组。
遍历数组并通过drupal_mail发送电子邮件。请查看_user_mail_notify()
上面链接的kiamlaluno 函数。
如果用户从未登录过,则可能需要发送重置密码邮件(此处不确定),可能使用drupal_mail和hook_mail_alter的组合来根据您的喜好自定义注册或重置密码电子邮件。
希望能有所帮助,因为到目前为止我还没有实现与Drupal相似的功能,所以我知道这有点粗略,我只是想出一些想法来了解如何以安全的方式通知用户。在电子邮件中使用纯文本密码有很多选择。
祝你好运的朋友,为您加油,新年快乐!
[user:one-time-login-url]
。