(一)ucenter与项目的接口通信
1.打开下载的UCenter,把 advanced 目录里面的 uc_client 和 examples下面的api 文件夹复制到你的网站根目录。(我是统一放在jiekou_api的文件夹下方便管理)
2.在开始进行我们的api目录里面的uc.php 配置了
(1)在jiekou_api文件夹创建config.inc.php文件,用于配置(后面会提到里面写什么)。
(2)找到61行左右位置,
$GLOBALS['db'] = new dbstuff;
$GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
$GLOBALS['tablepre'] = $tablepre;
将以上3行修改成:
$GLOBALS['db'] = new ucclient_db;
$GLOBALS['db']->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, UC_DBNAME, UC_DBCONNECT, true, UC_DBCHARSET);
$GLOBALS['tablepre'] = UC_DBTABLEPRE;
(用于调用uc的数据库操作方法,否则将不能通信成功)
3.登录配置好的ucenter站点——应用管理,添加应用
(1)应用类型:由于是自己的程序,选择其他
(2)应用的主url:http://xxxxx/jiekou_api (末尾不加“/ ”)
(3)应用IP,后面说明说不用填写
(4)应用密钥: 例如 edlt
(5)应用的物理路径:也提示说可以不用填写
(6)开启同步登录,提交
4.打开生成好的应用,底部会出现应用的 UCenter 配置信息: 将框里的信息复制至之前创建好的config.inc.php文件里。
5.返回查看 应用后面是否显示 通信成功。
(二)对接流程与原理
1.打开Index控制器 的index方法,找到相应位置,引入:
include_once(DOKEOS_ROOT_SYS .'jiekou_api/config.inc.php');
include_once(DOKEOS_ROOT_SYS .'jiekou_api/uc_client/client.php');
2.获得用户登录的 账号密码,通过:
$uc_members_info=uc_user_login($username,$password); //这是uc的验证uc库里用户信息的方法。直接调用即可。返回值>=1则表示验证成功。
3.$uc_uid = uc_user_register($username, $password, $email);//这是uc注册用户的方法,可以结合,上一步进行用户的自动添加,返回值为uc库里的用户uid。
4.验证成功后,通过uc_user_synlogin($uc_members_info[0]); 来执行一站登录的代码。
此方法原理为:通过uc的代码,生成一段js,这段js执行后会访问相应站点下的api接口文件,命令本站生成cookie,cookie默认名称为Example_auth,可以通过uc.php文件里的synlogin函数更改名字,里面存储的是一段将用户名密码加密编码后的字符串。
在此步请注意,生成的COOKIE[‘Example_auth’]路径问题,这会直接导致本页面能否正常使用本cookie的问题。
解决方法:打开uc.php找到,270行左右 _setcookie函数中,有一项$cookiepath,如果不按照上面提示引入配置文件(前提配置文件里已添加$cookiepath的配置), 就需手动将$cookiepath更改为 ‘/’
5.生成成功后,调用本COOKIE[‘Example_auth’]即可,由于是一段加密的字符串,所以需要解密。
include_once(ROOT_PATH .'jiekou_api/config.inc.php');
include_once(ROOT_PATH .'jiekou_api/uc_client/client.php');
(引入文件)
调用方法,返回值为uc库中的uid与username
list($Example_uid,$Example_username)= explode("\t", uc_authcode($_COOKIE['Example_auth'], 'DECODE'));
另:如果登录是用ajax的 则 使用$("body").append(msg);输出即可,如不过不是 直接echo uc_user_synlogin($uid)即可