我试图在密码重置后使用$\\u POST方法提交操作下面是代码
add_action( \'after_password_reset\', \'action_function\', 10, 2 );
function action_function( $user, $new_pass ){
if (isset( $_POST[\'password_1\'] ) ) {
update_user_meta($user->ID, \'user_pass2\', password_hash($_POST[\'password_1\'], PASSWORD_DEFAULT));
}
}
但它不会被解雇
有小费吗?
还有reason 我需要另一个应用程序凭据使用的密码。例如,以下代码显示了我在profile\\u更新期间如何使用$\\u POST
function my_profile_update( $user_id ) {
// password changed...
if ( ! is_admin() && isset( $_POST[\'password_1\'] ) ) {
update_user_meta($user_id, \'user_pass2\', password_hash($_POST[\'password_1\'], PASSWORD_DEFAULT));
global $wpdb;
global $current_user;
$script_db = new wpdb(\'db\', \'pass\', \'user\', \'localhost\');
get_currentuserinfo();
$email = (string) $current_user->user_email;
$password = (string) get_user_meta( $current_user->ID, \'user_pass2\', true );;
$query = $script_db->prepare( "SELECT * FROM {$script_db->prefix}np_users WHERE email = %s", $email );
$results = $script_db->get_results($query);
if(count( $results ) > 0) {
$id = $results[0]->id;
$script_db->update(\'np_users\', array(
\'password\' => $password
),array(\'id\'=>$id));
}
}
}
add_action( \'profile_update\', \'my_profile_update\' );
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
你不应该用这些钩子。如果你不想在其他应用程序中使用相同的密码,那么密码始终保持不变是至关重要的。
因此,最好的办法是确保它永远是真实的。怎样通过处理这些。
WordPress使用wp_set_password
每次更改密码时都会运行。里面没有钩子(https://core.trac.wordpress.org/browser/tags/5.1.1/src/wp-includes/pluggable.php#L0), 但是it\'s pluggable - 因此,您可以编写自己的版本。那么就这样做吧:
function wp_set_password( $password, $user_id ) {
// Keep original WP code
global $wpdb;
$hash = wp_hash_password( $password );
$wpdb->update(
$wpdb->users,
array(
\'user_pass\' => $hash,
\'user_activation_key\' => \'\',
),
array( \'ID\' => $user_id )
);
wp_cache_delete( $user_id, \'users\' );
// and now add your own
$script_db = new wpdb(\'db\', \'pass\', \'user\', \'localhost\');
$custom_hash = password_hash( $password, PASSWORD_DEFAULT );
$userdata = get_userdata( $user_id );
$script_db->update(
\'np_users\',
array( \'password\' => $custom_hash ),
array( \'email\' => $userdata->user_email )
);
}
这样,密码将始终同步。(例如,如果管理员更改了用户的密码,您的代码将破坏密码)。
您也不必将第二个哈希存储为用户元。而且它执行的查询更少-您不必通过电子邮件选择用户,然后使用他的ID更新密码-您只需运行更新即可。
您所需要做的就是将该函数放入插件中。