在我的 Drupal 模块中,我试图挂钩用户更改密码的位置。我需要这个明文来做别的事情。
所以我做了基本的事情并使用了tcauth_user_presave()
. 然后我更改了触发日志记录功能的密码。但是,当我查看日志时,提供&$edit
的$account
、 和$category
变量不包含明文形式的新密码。唯一可用的是旧密码(明文)和散列的新密码。
无论如何,当有人更改明文密码时,是否可以获得明文密码?如果重要的话,这就是 Drupal 7。
在我的 Drupal 模块中,我试图挂钩用户更改密码的位置。我需要这个明文来做别的事情。
所以我做了基本的事情并使用了tcauth_user_presave()
. 然后我更改了触发日志记录功能的密码。但是,当我查看日志时,提供&$edit
的$account
、 和$category
变量不包含明文形式的新密码。唯一可用的是旧密码(明文)和散列的新密码。
无论如何,当有人更改明文密码时,是否可以获得明文密码?如果重要的话,这就是 Drupal 7。
在调用 presave 钩子之前,密码在user_save()中被散列。
但是,看起来除了更改表格之外还有另一种选择。在user_profile_form_submit( )中调用user_save()之前,通过 entity_form_submit_build_entity() 辅助函数调用 hook_field_attach_submit()。虽然它是一个字段挂钩,但它确实将完整的用户对象作为 $entity 接收。
不确定这是否真的比更改表单更好,因为所有实体更改都会调用钩子,而不仅仅是用户。
我不确定它是否是捕捉它的最佳位置,但纯文本输入在 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 对其进行编码之前,您将拥有对密码的完全访问权限。如果您需要更多详细信息,请发表评论。
这是我的例子。在我的情况下,阅读新密码很有帮助。
/**
* 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;
}
}
试试这个hook_user_update()
$_POST['pass']['pass2']