Как проверить, изменил ли пользователь пароль?

9

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

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

Есть ли способ проверить, изменил ли пользователь свой пароль, используя правила или прагматично.

- Большое спасибо за ваше время.

Калпеш Патель
источник
1
Проверить это может помочь вам drupal.stackexchange.com/questions/68380/…
Сэмюэль Бениамин

Ответы:

7

Проще всего сделать это с помощью правил. Следуя следующим шагам, следует сделать работу.

  1. Убедитесь, что вы включили «фильтр PHP» на странице модулей. Это необходимо, чтобы иметь возможность использовать PHP-код внутри правил.
  2. Создайте правило, которое реагирует на пользовательское событие «После сохранения новой учетной записи пользователя».
  3. Добавьте условие типа «Выполнить пользовательский код PHP» и используйте следующий фрагмент:
    return $account_unchanged->pass != $account->pass;
  4. Добавьте свои действия, чтобы отправить уведомление по электронной почте пользователю или что-либо еще, что соответствует вашей цели.
Ови
источник
ты пробовал это?
Aboodred1
Да, я проверил это перед тем, как написать ответ.
ovi
Спасибо, простое и эффективное решение. Работает как шарм!
Kalpesh Patel
4

Я не пробовал его в правилах раньше, но это, вероятно , будет вопросом сравнения значений на $accountи $account->originalобъектах.

Один из способов сделать это в пользовательском коде - реализовать hook_user_presave():

function MYMODULE_user_presave(&$edit, $account, $category) {
  // Don't show message for registering users.
  if (isset($account->is_new) && $account->is_new) {
    return;
  }

  if (!empty($edit['pass']) && $account->pass != $edit['pass']) {
    // Password has been changed.
  }
}

Вы могли бы сделать то же самое hook_user_update(), но я не пробовал это раньше. Вышесказанное взято из живого проекта и работает отлично.

Клайв
источник
1

Использование правил может быть проще, так как вы уже используете его, но вам нужно включить модуль PHP Filter .

Инструкции как следовать:

  1. Включить модуль PHP Filter admin/modules
  2. Создать новое правило admin/config/workflow/rules
  3. Удостоверьтесь, чтобы выбрать After updating an existing user accountиз Реагировать на выпадающий список событий.
  4. Добавить условие и выбрать Execute custom PHP code
  5. Добавьте следующий пользовательский код PHP в раздел значения

    if(!empty($account->current_pass)) { return true; }

  6. Затем добавьте действие и выберите Send mail

  7. В разделе значения добавьте [account:mail]и заполните поле темы и поле сообщения.
Aboodred1
источник