WordPress用户身份验证过程


Wordpress User Authentication Process

我正在构建一个wordpress系统,我想从外部源而不是wordpress DB对用户进行身份验证。我正在使用 wsdl 服务与外部数据库通信,并且我正在根据他们的凭据获取正确的用户信息。但是,我不知道如何进一步处理获得的结果。有人请帮助我。

以下是我到目前为止完成的步骤

在可插拔中创建自定义函数.php并在user.php中调用它

function wp_authenticate_username_password($user, $username, $password) {
    if ( is_a($user, 'WP_User') ) { return $user; }
    if ( empty($username) || empty($password) ) {
        if ( is_wp_error( $user ) )
            return $user;
        $error = new WP_Error();
        if ( empty($username) )
            $error->add('empty_username', __('<strong>ERROR</strong>: The username field is empty.'));
        if ( empty($password) )
            $error->add('empty_password', __('<strong>ERROR</strong>: The password field is empty.'));
        return $error;
    }
    //$user = get_user_by('login', $username);  /*Replaced it with the below*/
    $user = validate_ep($username,$password);    
    echo "<pre>";
    print_r($user);  /*Produces the result in step 3*/
    echo "</pre>";
    exit;

pluggable.php中与外部数据库通信的自定义函数

function validate_ep($username, $userpwd) { 
    $wsdl = "my web service path";
    $client = new SoapClient($wsdl); //(Parameter is the wsdl file in which the services are written.
    $newObj = new stdClass;
    $user_name = ucfirst($username);
    $user_pwd = md5($userpwd);
    $display_type = 'wp';
    try {
        $result = $client->log_process(array(0 => $user_name, 1 => $user_pwd, 2 => $display_type));              
        if ($result==FALSE)
            return FALSE;
        foreach($result->item as $key=>$valObj) {
            if(!is_numeric($valObj->key)) {
                $newObj->{$valObj->key} = $valObj->value;
            }
        }               
        /*$actual = unserialize(base64_decode($result));*/
        if (count($result) > 0) {
            $user = new WP_User;
            $user->init($newObj);
            return $user;
        }
    } catch (SoapFault $exp) {
        //print_r( $exp->getMessage());               
    }
    return false;
}

从 Web 服务返回的结果

WP_User Object
(
    [data] => stdClass Object
    (
        [id] => ID
        [organization] => ID
        [login] => UserName
        [password] => ***
        [name] => Name
    )
    [ID] => 0
    [caps] => Array
    (
    )
    [cap_key] => wp_capabilities
    [roles] => Array
    (
    )
    [allcaps] => Array
    (
    )
    [filter] => 
)

在这些步骤之后,有人请帮助我该怎么办。

我建议不要像user.php那样更改WordPress核心文件,因为一旦WordPress核心升级,它就会被覆盖。相反,我建议阅读以下文章:

WordPress替换内置用户身份验证

它在视频演示中也有解释。

我在下面添加仅摘要:

替换内置身份验证时要记住的事项

WordPress严重依赖其内置的用户系统。正因为如此,WordPress数据库中有很多对用户的引用。虽然有点烦人,但解决这些限制仍然相当简单。

WordPress要求真实用户(WordPress用户

)存在于WordPress数据库中,以便对该用户执行操作。幸运的是,WordPress包含创建,操作和删除用户的功能。因此,当我们构建服务时,我们实际上将采取以下步骤,这些步骤应该与身份验证类型无关:

  • 通过备用方法对用户进行身份验证
    • 如果无效用户显示无效登录消息
    • 如果有效用户
      • 检查用户是否存在于 WordPress 用户表中
      • 如果用户存在,则在WP_User对象中加载并返回用户数据
      • 如果用户不存在
        • 从备用身份验证服务用户信息自动创建新用户
        • 创建用户后,在WP_User对象中加载和返回用户数据