入口文件./wp-login.php
一、登出
登出代码中的核心函数是wp_logout(), 此函数位于./wp-includes/pluggable.php,
从代码看, 它完成了清楚服务器端session和客户端的cookie的任务。
function wp_logout() { wp_destroy_current_session(); wp_clear_auth_cookie(); ...... }
二、登录
核心函数是wp_signon, 此函数位于./wp-includes/user.php
function wp_signon( $credentials = array(), $secure_cookie = '' ) { ...... $user = wp_authenticate($credentials['user_login'], $credentials['user_password']); if ( is_wp_error($user) ) {//登录失败 if ( $user->get_error_codes() == array('empty_username', 'empty_password') ) { $user = new WP_Error('', ''); } return $user; } // 登录成功, 设置cookie wp_set_auth_cookie($user->ID, $credentials['remember'], $secure_cookie); ...... }
登录成功后, 会执行函数wp_set_auth_cookie
function wp_set_auth_cookie { .... setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true); if ( COOKIEPATH != SITECOOKIEPATH ) setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true); }
因此, 检查wp_signon进行登录成功与否的方式就是
$user = wp_signon( '', $secure_cookie ); if ( empty( $_COOKIE[ LOGGED_IN_COOKIE ] ) ) { // 登录失败 } else { // 登录成功 }
三、注册
核心函数为 register_new_user(), 位于./wp-includes/user.php, 希望修改网站的注册方式, 需要从修改这个函数入手。
默认的注册流程为: 首先填写账户名和邮箱进行初步注册; 接着系统将自动生成的密码发送到用户邮箱;用户登录邮箱,获取密码后, 才能登录到wordpress系统。 与现在大多数的互联网站点相比, 这个流程实在复杂。 于是就需要通过插件, 修改默认注册流程: 在第一步,填写用户名邮箱的同时, 用户自己填写密码, 具体的实现文章请参考wordpress注册界面:用户填写密码。
四、 找回密码
核心函数retrieve_password(), 位于./wp-login.php. 它完成向用户发送充值密码邮件的工作。
五、判断是否登录
is_user_logged_in()[位于./wp-includes/pluggable.php], 返回布尔值, 代表登录是否成功。
从全局变量$current_user中判断用户是否登录。
function is_user_logged_in() { $user = wp_get_current_user(); return $user->exists(); }
function _wp_get_current_user() { global $current_user; if ( ! empty( $current_user ) ) { if ( $current_user instanceof WP_User ) { return $current_user; } ...... }
五、 密码
class PasswordHash位于./wp-includes/class-phpass.php。wordpress采用了phpass算法, 可到此处下载算法的实现:http://www.openwall.com/phpass/。
$wp_hasher = new PasswordHash( 8, true ); // 生成密码hash $passHash = $wp_hasher->HashPassword($password); // 判断明文密码是否与hash相匹配 $isPass = $wp_hasher->CheckPassword($password, $passHash);