我们当前的系统(不使用Wordpress)有1000个用户,我们需要将其移植到Wordpress。我们遇到的问题是密码不能保持不变。
在我们当前的系统中,密码保存为:
md5( md5( $password ) . USER_SALT ); // USER_SALT is a defined constant
显然不是最好的,但也不是最坏的。。。
我们需要使这些密码哈希,我们目前有工作在WP以及。是否有一种方法可以先通过此设置运行所有新密码,然后再通过WPs自己的哈希?
我知道您可以使用以下函数:
function my_hash_password($password){
return md5( md5( $password ) . USER_SALT );
}
add_action(\'wp_hash_password\', \'my_hash_password\' );
出于某种原因,这也没有完全奏效。
肯定有其他人以前也经历过这种情况。
谢谢
编辑
到目前为止,还存在一些混乱。我并不是在要求不对我们的哈希密码进行哈希运算。我想说的是,在我们当前的系统中,密码看起来像:
Password: password
Hash function: md5( md5( $password ) . USER_SALT );
Output: d372f9c033e9c358b111ff265e080d3a
我希望“也许”能够获取上面的哈希并将其提供给本机WP密码哈希器,以便:
d372f9c033e9c358b111ff265e080d3a
变成。。。
$P$BdrwxndTzgTVHUozGpQ9TEMYd6mpTw0
完成其功能后。
然后,当用户登录时,我们通过我们的函数发送他们的纯文本密码,然后通过WPs获得匹配。
使现代化
因此,根据以下rarst的建议,我已经这样做了:
function my_check_password($password, $hash, $user_id = \'\') {
global $wp_hasher;
if ( $hash == md5( md5( $password ) . USER_SALT ) ){
if ( $user_id ) {
$check = true;
wp_set_password($password, $user_id);
$hash = wp_hash_password($password);
}
return apply_filters( \'check_password\', $check, $password, $hash, $user_id );
}
// If the hash is still md5...
elseif ( strlen($hash) <= 32 ) {
$check = hash_equals( $hash, md5( $password ) );
if ( $check && $user_id ) {
// Rehash using new hash.
wp_set_password($password, $user_id);
$hash = wp_hash_password($password);
}
return apply_filters( \'check_password\', $check, $password, $hash, $user_id );
}
// If the stored hash is longer than an MD5, presume the
// new style phpass portable hash.
if ( empty($wp_hasher) ) {
require_once( ABSPATH . WPINC . \'/class-phpass.php\');
// By default, use the portable hash from phpass
$wp_hasher = new PasswordHash(8, true);
}
$check = $wp_hasher->CheckPassword($password, $hash);
/** This filter is documented in wp-includes/pluggable.php */
return apply_filters( \'check_password\', $check, $password, $hash, $user_id );
}
add_action(\'wp_check_password\', \'my_check_password\' );
但这仍然不起作用。我错过了什么?