Отправить пароль пользователя на почту


20

Я хочу отправить напоминание по электронной почте пользователям, чтобы войти на мой сайт с их именем пользователя и паролем. Мой почтовый скрипт готов с идентификатором входа, но я не знаю, как расшифровать пароль пользователя.

Может кто-нибудь сказать мне, как я должен получить пароль, связанный с учетной записью пользователя?

Ответы:


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-адреса для сброса пароля. Это означает, что пользователи не получают свои необработанные пароли, но получают специальную ссылку для входа в систему и устанавливают новый. Один раз логин URL можно найти в токене [user:one-time-login-url].
Калабро

15

Пожалуйста! Не делай этого!

Внедрить систему входа в систему в веб-приложении очень просто. Реализация системы безопасного входа в систему в веб-приложении - это совсем другое дело. Есть много аспектов и деталей, которые нужно учитывать, и Drupal отлично справляется со всеми этими аспектами из коробки.

Добавление запрашиваемой вами функции значительно снизит безопасность вашего приложения. Если вы можете расшифровать пароли, вы только что лишили свое приложение очень важной меры безопасности.

Другие ответы объясняют обходные пути, ответ BetaRide будет делать то, что вы просите, но учтите, что я полностью согласен с его заключительным заявлением.

В общем, я бы, вероятно, решил это более или менее следующим образом:

В пользовательском модуле

  1. Реализовать hook_cron , то это создает массив , содержащий все письма , которые удовлетворяют критерии вашего выбора.

  2. Прокрутите массив и отправьте электронные письма через drupal_mail. Посмотрите на функцию _user_mail_notify() kiamlaluno, связанную с выше.

Если пользователь никогда не входил в систему, вам может потребоваться отправить письмо с паролем сброса (не уверен здесь), возможно, используя комбинацию drupal_mail и hook_mail_alter, чтобы настроить регистрацию или электронное письмо с паролем сброса на ваш вкус.

Надеюсь, это поможет, я знаю, что это немного схематично, так как я до сих пор не реализовал ничего подобного в своем опыте с Drupal, я просто выдвигал несколько идей о том, как можно безопасно уведомлять пользователей. Есть много альтернатив, чтобы иметь простой текстовый пароль в электронном письме.

Удачи друг, поздравляю вас и счастливого нового года!


2
Первое предложение этого ответа должно быть выделено жирным шрифтом 16pt, и, возможно, это одно из немногих мест, где тег моргания мог бы быть подходящим.
Всезнающий

9

Вы можете использовать модуль шифрования AES для получения читаемых паролей.

Однако есть очень веские причины, по которым пароли не читаются в стандартном Drupal. ИМХО использование встроенных однонаправленных ссылок pw-recovery намного безопаснее.


0

Вы можете использовать Модуль токена пароля учетной записи для отправки пароля по почте

Экспериментальный проект

Это песочница , которая содержит экспериментальный код только для разработчиков.

Этот небольшой модуль предоставляет маркер пароля учетной записи пользователя для настроек электронной почты учетной записи. Администратор сайта разрешил отправлять пароль пользователю в следующих настройках: -

  1. Добро пожаловать (новый пользователь создан администратором)
  2. Добро пожаловать (одобрение не требуется)
  3. Активация аккаунта
  4. Добро пожаловать (подтверждение не требуется, пароль установлен)
  5. Восстановление пароля
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.