看完所有关于ucenter的提问,有人已经解决,但没有给出具体方案,说的最多的就是wordpress那个ucenter插件有问题,API没有做好,但是到底是什么问题,怎么改?可否提供下载?
我现在有个笨办法,实现了一半,即:
在wordpress登录/登出时,wecenter可以同步登录/登出,
但反过来,在wecenter登录/登出时,wordpress不能同步。
实现方法是:
wordpress的ucenter插件目录下ucenter.php内有一个函数:
function authenticate_username_password( $user, $username, $password )
该函数的 if ( $uid > 0 ) 分支表示wordpress已经登录成功,我在分支尾部接上如下代码:
//同步登录wecenter
$url = "http://localhost/account/ajax/login_process/";//开启伪静态后的登录表单action地址
$post_data = array (
"user_name" => $username,
"password" => $password
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// post声明
curl_setopt($ch, CURLOPT_POST, 1);
// 设置发送的data
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$output = curl_exec($ch);
curl_close($ch);
其实就是服务器直接模拟登录wecenter,实现了上述功能。
但是反过来从wecenter到wordpress这一半,可否用类似的方法实现?或者那个ucenter插件api到底该怎么改?请会的一定共享出来,不胜感激!
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2013-11-12补充说明:
已确认以下问题:
[](已解决)wecenter的插件uc_client/data/cache/apps.php文件不存在,于是wecenter会认为这个站点内有需要通知的应用,导致sync_login同步登陆的HTML代码没有输出到跳转页面,所以wp插件那边的api根本没有收到同步登录的通知。[/]
这个可能是我自己操作的问题,因为我安装wecenter后为了更新版本曾经整体删掉过旧版,然后上传新版本后估计ucenter管理中心就没再通知wecenter更新app了。
[]原来WP那个ucenter插件api代码确实有问题,也有可能是WP多次升级后不兼容了吧,它收到ucenter管理中心那边过来的通知后,require_once(WP_ROOT . '/wp-load.php')这句这里代码就已经中断执行了。[/]
这个代码我跟踪的结果是,wp-load.php文件里面有一句引用wp-config.php文件,本质上就是在这儿卡住了,我在wp-config.php里面起始位置添加了debug代码,但无输出,说明对这个文件的引用完全没执行。最先以为是权限问题,后来我把所有文件都设755权限,还是一样,也就到此为止了。
到目前我仍然没能确认问题本质,因为ucenter管理中心那边显示通信成功,那自然uc_note->test()函数已经执行成功,大概是那句error_reporting(0)的功劳?
[]本人php初学,很多语法不明白,我试了很多种方法,没能在api中用上WP的内置函数,没法跟WP沟通,最后想到一个办法,在主题目录新建了一个专用模板,并以此模板建一个空白页面(http:\/\/localhost/sync_login),然后我把api/uc.php做成一个简单的转发功能,把接受到的所有GET和POST信息全部传递给http:\/\/localhost/sync_login,由于这个页面是由WP基于页面模板生成的,自然就能够直接使用WP的所有函数,于是终于实现了双向同步。还有很多功能没有完成,等后面做好了,准备整理成一个新插件。[/]
//以上方法由飞来优化原创,保证可以实现,但安全问题请自行考虑。
阅读全文
收起全文