当用户在Drupal中更改密码时,以明文形式获取新密码?

时间:2011-01-21 05:37:24

标签: php drupal drupal-modules drupal-7

在我的Drupal模块中,我试图挂钩用户更改密码的位置。我需要以明文形式提供其他内容。

所以我做了基本的事情并使用了tcauth_user_presave()。然后我更改了我的密码,触发了日志功能。但是,当我查看日志时,提供的&$edit$account$category变量不包含明文中的新密码。唯一可用的是旧密码(以明文形式表示)和新密码哈希。

当有人更改时,是否有获取明文密码?如果重要的话,这就是Drupal 7.

4 个答案:

答案 0 :(得分:2)

在调用预挂钩之前,密码在user_save()中进行哈希处理。

然而,看起来还有另一种选择,而不是改变表格。在user_profile_form_submit()中调用user_save()之前,通过entity_form_submit_build_entity()辅助函数调用hook_field_attach_submit()。虽然它是一个字段挂钩,但它确实将完整的用户对象接收为$ entity。

不确定这是否真的比改变表单更好,因为为所有实体更改调用了钩子,而不仅仅是用户。

答案 1 :(得分:1)

我不确定它是否是抓住它的最佳位置,但是在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编码之前,您可以完全访问密码。如果您需要更多详细信息,请发表评论。

答案 2 :(得分:0)

这是我的榜样。在我的情况下,阅读新密码很有帮助。

/**
 * 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;
  }
}

答案 3 :(得分:0)

hook_user_update()

上试试
$_POST['pass']['pass2']