Получить новый пароль открытым текстом, когда пользователь меняет его в Drupal? - PullRequest
1 голос
/ 21 января 2011

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

Так что я сделал основную вещь и использовал tcauth_user_presave().Затем я изменил свой пароль, который вызвал функцию регистрации.Однако, когда я посмотрел журнал, предоставленные переменные &$edit, $account и $category не содержали новый пароль в открытом тексте.Единственной доступной вещью был старый пароль (в открытом тексте) и новый хэшированный пароль.

Есть ли способ получить пароль в виде открытого текста, когда кто-то его меняет?Это Drupal 7, если это имеет значение.

Ответы [ 4 ]

2 голосов
/ 21 января 2011

Пароль хешируется в user_save () перед вызовом preave-хука.

Похоже, что есть и другой вариант, кроме изменения формы. Перед вызовом user_save () в user_profile_form_submit () , hook_field_attach_submit () вызывается через вспомогательную функцию entity_form_submit_build_entity (). Хотя это перехватчик поля, он получает полный пользовательский объект как $ entity.

Не уверен, что это действительно лучше, чем изменять форму, потому что ловушка вызывается для всех изменений сущностей, а не только для пользователей.

1 голос
/ 21 января 2011

Я не уверен, что это лучшее место, чтобы поймать его, но простой текстовый ввод доступен в hook_form_alter:

function testing_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id = 'user_profile_form') {
    dpm($form_state['input']['pass']['pass1']);
  }
}

ОБНОВЛЕНИЕ : Я еще немного покопался. Я думаю, я бы решил добавить еще один обработчик отправки в user_profile_form, добавив его в массив перед user_profile_form_submit. После этого у вас будет полный доступ к паролю, прежде чем он будет закодирован user_profile_form_submit. Оставьте комментарий, если вам нужно больше деталей.

0 голосов
/ 20 декабря 2011

Попробуйте это на hook_user_update()

$_POST['pass']['pass2']
0 голосов
/ 29 сентября 2011

Это мой пример. В моем случае полезно прочитать новый пароль.

/**
 * Implement hook_field_attach_submit().
 */
function yourmodulename_field_attach_submit($entity_type, $entity, $form, &$form_state) {
  if ($entity_type == 'user') {
    // deal with $form["#user"]->pass;
  }
}
...