如果要在密码更改期间捕获新密码,则使用什么操作钩子?

时间:2016-07-14 作者:Abel Melquiades Callejo

单击Update Profile 中的按钮

[wordpress]/wp-admin/profile.php
管理员屏幕将允许用户更新其个人资料,包括密码。

如果要在此密码更改过程中捕获新密码,正确的操作挂钩是什么?

2 个回复
SO网友:Ismail

我一直在寻找核心文件中的钩子,很少有钩子edit_user() 更新中的用户数据的函数profile.php 第页,因此我完成了一些解决方法:

我的解决方法是在更新密码之前将用户密码保存在自定义选项中,然后与此用户的密码进行匹配,以查看其是否已更改:

add_action("check_passwords", function( $user_login, $pass1, $pass2 ) { 

    if ( !is_admin() || !defined(\'IS_PROFILE_PAGE\') || !IS_PROFILE_PAGE )
        return; // not profile.php page, let\'s mind our business

    update_option( "_se_debug_user_submitted_pass", wp_get_current_user()->user_pass );
    return;

}, 10, 3);

add_action("admin_init", function() { 

    global $pagenow;
    if ( "profile.php" !== $pagenow ) return;
    global $current_user;

    if ( get_option( $opt_name = "_se_debug_user_submitted_pass" ) && (string) get_option( $opt_name ) !== (string) $current_user->user_pass ) {

        // the password has changed.
        echo "Password has changed!";
        /* do things here */

        delete_option( $opt_name ); // do only once
    }

});
这应该行得通,只要profile.php 页面(更新自己的配置文件)。

要捕获密码,请在此行后执行以下操作:

update_option( "_se_debug_user_submitted_pass", wp_get_current_user()->user_pass );

使用新密码值更新自定义选项$pass2 这是密码确认,并在中调用此选项// the password has changed. 包这对获取用户的纯文本密码一点也不好,我永远不会推荐这样的事情,但这是你的决定,风险自负。除非您捕获散列过程,否则这完全没问题。

一件事是,如果用户更新了密码,但仍然使用相同的旧密码,此条件仍将被触发,因为WordPress密码哈希系统使用随机生成的盐,因此返回的结果将不同(强大的安全性,如果您在项目中使用md5进行哈希,我想请您停止使用md5)。

希望这能有所帮助。

SO网友:dev_masta

有时WordPress与其他系统同步运行(或者应该同步运行),这就是我的情况——在WP中更改密码的用户应该在另一个地方拥有相同的新密码——此时我需要纯文本的密码。

我用来获取新密码的代码看起来比以前的答案要干净一些:

// when password is changed from wp-admin (for himself or some other user, if admin)
function update_my_new_password( $user_id ) {

    if ( empty( $_POST[\'pass1\'] ) || $_POST[\'pass1\'] !== $_POST[\'pass2\'] ){
        return;
    }

    // password changed...
    $new_pass = $_POST[\'pass1\'];

}
add_action( \'profile_update\', \'update_my_new_password\' );
Theprofile_update 钩子在OP的管理屏幕上激发,如果$_POST[\'pass1\'] 不为空。如果新密码与旧密码相同,它也会触发。

还有另一种情况,用户可以更改密码,即丢失密码功能。为此采取的行动应该是after_password_resetpassword_reset 但我还没有测试,因为在我的例子中,我需要找到MemberPress插件的钩子,它不会触发这个特定的钩子。

相关推荐

Login without Password

在Wordpress中,我需要添加一个过滤器,其中用户角色订阅者只需在表单中输入其电子邮件地址即可登录,无需密码,只需检查电子邮件是否针对订阅者,并将其重定向到特定页面,我尝试了许多解决方案,但我没有收到,谢谢