我正在构建一个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包含创建,操作和删除用户的功能.因此,当我们构建我们的服务时,我们实际上将采取以下步骤,这应该是相当认证类型不可知的: