我一直在寻找核心文件中的钩子,很少有钩子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)。
希望这能有所帮助。