正在学习ucenter

//---------会一点补充一点,以后忘的时候可以翻文章

 

// 应用创建

// 应用分析

根据自带的例子,创建A,B项目,ucenter为用户中心.

1,先安装用ucenter,

复制upload目录,按提示进行安装.

ucenter 有2个部分 一个是Upload目录 ,是服务器的安装目录,一个是uc_client是客户端目录,

增加两个目录,在根目录创建项目project_a,project_b,把uc自带的例子里的文件放到A 和B 里各一份

然后把需要放到客户端的 目录 uc_client 也分别放在两个项目中

2,添加新应用A,

  选择自定义安装,

  应用的主url, 写自己的A项目的目录

  应用类型 ,选择其他

  是否开启同步登陆,选择是

确定提交

然后查看A应用提示通信失败,这是正常的,因为没取到正确配置, 右键编辑应用,

里面的配置信息复制.

 

3,打开A项目的 配置文件 , 用刚才复制的配置信息 替换掉默认的配置信息, 下面是一些数据库的配置 改好之后,返回查看是否通信成功

(通信失败原因很多,建议用firefox,的FireBug 查看返回值,为1的时候就表示通信成功,根据错误信息找原因,有时候为的1的时候提示也失败,你可以var_dump($status) 如果你看到的是string(4)"1" 就说明有Bom头信息, 网上很多Bom头的函数)

4,项目A通信成功 ,设置项目B ,步骤一样,

这样就完成用户集成了.

A注册 B能登录  B注册A能登录,

// 关于例子的功能实现

例子提供了很多功能 比如登录 ,注册,退出 ,

这是例子的主页,

加载了 3个重要文件,

通过$_GET['example']  选择调取哪个PHP文件.

1,注册

 

<?php
if($_GET['action'] == 'activation') {  // 如果有传参数 ,表示是登录过来需要激活的用户
		echo '激活:';
		list($activeuser) = explode("\t", uc_authcode($_GET['auth'], 'DECODE')); //解析
		
		
		echo '<input type="hidden" name="activation" value="'.$activeuser.'">';
		echo '<dl><dt>用户名</dt><dd>'.$activeuser.'</dd></dl>';
	} else {
	
		echo '注册:';
		echo '<dl><dt>用户名</dt><dd><input name="username"></dd>';
		echo '<dt>密码</dt><dd><input name="password"></dd>';
		echo '<dt>Email</dt><dd><input name="email"></dd></dl>';
	}
?>

 否则正常流程 接收POST , 用函数 uc_get_user()  如果ucenter 用户表中有值,说明用户存在只需要在没登陆别的项目中激活

没有的话用函数 uc_user_register() 注册 , 返回uid,大于0,表示ucenter 用户注册成功,

同时在本项目中的用户表中 inset 用户,

设置cookie  注册成功

2, 登录

uc_user_login() 这是检查uc用户表中是否有数据, 如果有的话 ,在查询本项目中的用户表时候存在当前用户, 没有的话需要激活,返回给注册, 然后设置cookie

uc_user_synlogin() 生成同步登录代码//

这个函数在uc_client/client.php中,

<?php
function uc_user_synlogin($uid) {

    $uid = intval($uid);
    if(@include UC_ROOT.'./data/cache/apps.php') {
        
        if(count($_CACHE['apps']) > 1) { //找$_CACHE['apps']下有几个应用大于1 就往下走
            $return = uc_api_post('user', 'synlogin', array('uid'=>$uid));
        } else {
    
            $return = '';
        }
    }
    return $return;
}
?>

其中用到了uc_api_post()函数

<?php
function uc_api_post($module, $action, $arg = array()) {
    $s = $sep = '';
    foreach($arg as $k => $v) {
        $k = urlencode($k);
        if(is_array($v)) {
            $s2 = $sep2 = '';
            foreach($v as $k2 => $v2) {
                $k2 = urlencode($k2);
                $s2 .= "$sep2{$k}[$k2]=".urlencode(uc_stripslashes($v2));
                $sep2 = '&';
            }
            $s .= $sep.$s2;
        } else {
            $s .= "$sep$k=".urlencode(uc_stripslashes($v));
        }
        $sep = '&';
    }
    $postdata = uc_api_requestdata($module, $action, $s);
    return uc_fopen2(UC_API.'/index.php', 500000, $postdata, '', TRUE, UC_IP, 20);
    
}
?>

发送到ucenter下control/user.php的onsynlogin()接口,返回一个js 直接输出,

例如

然后项目B ,在UC.PHP中根据参数的解析,调用到

    function synlogin($get, $post) {
    
        $uid = $get['uid'];
        $username = $get['username'];
        if(!API_SYNLOGIN) {
            return API_RETURN_FORBIDDEN;
        }

        header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
        _setcookie('Example_auth2', _authcode($uid."\t".$username, 'ENCODE'));
    }

然后写上项目B的 设置cookie的信息 ,刷新项目B的页面就同步了

3. -- 待研究,

 

 

// 关于同步

用户登陆成功之后  会生成 uc_user_synlogin() ,同步登陆的代码,用firebug查看 登录成功会AJAX发送一个数据

数据是发给Uc.php

通过解析code参数,

返回一个 action动作, 并执行这个方法,

//mark  加载中..

// 应用创建

转载于:https://www.cnblogs.com/my2014/p/3835397.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值