Wordpress用户身份验证过程

Ash*_*ish 7 php wordpress

我正在构建一个wordpress系统,我想从外部源代替wordpress DB验证用户.我正在使用wsdl服务与外部数据库进行通信,并且我根据其凭据获取正确的用户信息.但是我没有得到如何进一步处理获得的结果.有人请帮帮我.

以下是我到目前为止所做的步骤

在pluggable.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;
Run Code Online (Sandbox Code Playgroud)

自定义功能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;
}
Run Code Online (Sandbox Code Playgroud)

从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] => 
)
Run Code Online (Sandbox Code Playgroud)

有人请帮助我们在这些步骤后做些什么.

Dha*_*ang 12

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

WordPress替换内置的用户身份验证

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

我正在添加以下摘要:

更换内置身份验证时应注意什么

WordPress在很大程度上依赖于它的内置用户系统.因此,WordPress数据库中的用户有很多引用.虽然有点烦人,但解决这些限制仍然相当简单.

WordPress要求WordPress数据库中存在真实用户(WordPress用户)才能对该用户执行操作.幸运的是,WordPress包含创建,操作和删除用户的功能.因此,当我们构建我们的服务时,我们实际上将采取以下步骤,这应该是相当认证类型不可知的:

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