Ucenter整合Thinkphp 双向同步登录退出
1、整合初步工作:
1,安装Ucenter,完成后添加应用,填写要对接的网站地址
2,api , uc_client目录放置对接项目的根目录
3,通信对接,新建Ucenter组,confi文件填写在ucenter添加应用后生成的配置文件复制放入当前组的config.php文件
新建Api目录放置通信所需要的类库(注意类库之间的引入,3.2命名空间,3.1.3使用import导入 ** 此处比较容易出问题)
新建Index模块写入如下代码:
import("@.Api.UcenterLib");
UcenterLib::back();
UcenterLib::back();
刷新Ucener中的应用发现通信成功。ok,对接已好。
4,同步注册,同步登陆,同步退出
此步骤需要注意类库之间的应用,Ucapi类是主要实现这些同步操作,需要主要Ucapi类需要引入
require_cache(WEB_ROOT . '/Ucenter/Conf/config.php'); ucenter组下的config配置文件主要读取常量UC_API
require_once './uc_client/client.php';
require_once './uc_client/client.php';
多站点单点登陆解决方案:
在站点中的用户表需要关联Ucenter中的主键uid字段,以某个站点的会员注册为会员信息入口,注册入库同步Ucenter信息实现单点登陆。
2、对接成功后,在对接项目中发现同步登陆和同步推出异常的慢,卡好长时间,最终发现在同步的时候
if(@include UC_ROOT.'./data/cache/apps.php') { if(count($_CACHE['apps']) > 1) { $return = uc_api_post('user', 'synlogin', array('uid'=>$uid)); } else { $return = ''; } }
此处调用了uc_client目录下的应用cache下的apps,给与文件读写权限后,更新ucenter的缓存发现好了
3、ucenter同步注册密码机制:
$salt members表字段随机码
$password = md5(md5($password).$salt);
4、ucenter 通讯函数:
function onping() { $ip = getgpc('ip'); $url = getgpc('url'); $appid = intval(getgpc('appid')); $app = $_ENV['app']->get_app_by_appid($appid); $status = ''; if($app['extra']['apppath'] && @include $app['extra']['apppath'].'./api/'.$app['apifilename']) { $uc_note = new uc_note(); $status = $uc_note->test($note['getdata'], $note['postdata']); } else { $this->load('note'); $url = $_ENV['note']->get_url_code('test', '', $appid); $status = $_ENV['app']->test_api($url, $ip); } if($status == '1') { echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/correct.gif\' border=\'0\' class=\'statimg\' \/><span class=\'green\'>'.$this->lang['app_connent_ok'].'</span>";testlink();'; } else { echo 'document.getElementById(\'status_'.$appid.'\').innerHTML = "<img src=\'images/error.gif\' border=\'0\' class=\'statimg\' \/><span class=\'red\'>'.$this->lang['app_connent_false'].'</span>";testlink();'; } }
双向同步登陆退出关键在于
1、1:项目为自定义框架:api/uc.php,在此接口文件处理同步的相关操作
1、2:Thinkphp项目中Ucenter独立分组中的同步Ucenter类库中处理
注意问题:
define('UC_DBTABLEPRE', '`idcbbs`.`idcbbs`.idc_ucenter_');系统生成的错误配置项,难道ucenter系统有问题?此处导致bbs登陆失败,提示乱码问题
define('UC_DBTABLEPRE', '`idcbbs`.idc_ucenter_');
一个人静静坐在电脑面前写代码的感觉,那是什么感觉?那是武林高手闭关修炼的感觉。