php – WordPress用户身份验证过程

前端之家收集整理的这篇文章主要介绍了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;

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 Replace built in user authentication

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

我正在添加以下摘要

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

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

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

>通过备用方法验证用户

>如果无效用户显示无效的登录消息
>如果有效用户

>检查wordpress用户表中是否存在该用户
>如果用户存在加载并返回WP_User对象中的用户数据
>如果用户不存在

>从备用身份验证服务用户信息自动创建新用户>在WP_User对象中创建用户加载并返回用户数据之后

猜你在找的PHP相关文章