WordPress验证密码的代码为wp_check_password. 你会发现这个phpass:
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 );
这是
class-phpass.php 在WordPress代码中,乍一看它似乎没有WordPress函数依赖项,您可以只获取整个文件。
请注意,如果WordPress可以使用现有密码,您也可以修改此代码以匹配现有密码:您可以
添加您自己的authenticate 钩子,与默认的wp\\u authenticate\\u username\\u password类似
// Default authentication filters.
add_filter( \'authenticate\', \'wp_authenticate_username_password\', 20, 3 );
这将检查您自己的密码哈希,如果匹配,则返回填充的WP\\u用户对象
钩住check_password 过滤器,在测试哈希后,在wp\\u check\\u password末尾调用:
/**
* Filters whether the plaintext password matches the encrypted password.
*
* @since 2.5.0
*
* @param bool $check Whether the passwords match.
* @param string $password The plaintext password.
* @param string $hash The hashed password.
* @param string|int $user_id User ID. Can be empty.
*/
return apply_filters( \'check_password\', $check, $password, $hash, $user_id );
如果传入的$check值为false,则意味着密码与使用WordPress算法的哈希不匹配:然后可以使用现有逻辑根据哈希测试密码,如果匹配,则返回true。
这样您的用户就可以保留现有密码。如果需要,与现有哈希匹配的代码可以在用户对象中写入一个新样式的哈希,因为它有明确的密码,或者您可以继续匹配现有密码。
唉,检查cookie的代码有点复杂。它是wp_validate_auth_cookie. 如果你坚持到底,你会看到的
cookie被称为wordpress<;哈希值(>);或wordpress\\u sec\\u<;哈希值(>;,根据您是否使用HTTPS,其中哈希部分是站点URL的MD5,它被分为四个管道分隔部分用户名过期日期会话令牌-必须与用户的“会话令牌”wp\\u usermeta中的值匹配经过身份验证的哈希-其他三个组件的MD5-HMAC,加上用户密码散列中的四个字符(这样cookie在密码更改时无效),使用wp config中的AUTH\\u密钥或SECURE\\u AUTH\\u密钥作为HMAC密钥,我怀疑您最好提取WordPress代码的相关部分,而不是尝试重新实现,甚至以某种方式调用WordPress实例。
然而,您可以再次扩展WordPress来接受您现有的Cookie:在这种情况下,您希望挂钩determine_current_user.