Ucenter整合Thinkphp 双向同步登录退出

时间:2024-12-14 13:05:15
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();
  刷新Ucener中的应用发现通信成功。ok,对接已好。
  4,同步注册,同步登陆,同步退出
  此步骤需要注意类库之间的应用,Ucapi类是主要实现这些同步操作,需要主要Ucapi类需要引入
  require_cache(WEB_ROOT . '/Ucenter/Conf/config.php');  ucenter组下的config配置文件主要读取常量UC_API
  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_');