ucenter 整合同步登录 2019

1.介绍

ucenter的同步登陆,可以整个多个应用的会员系统,实现同步登陆 同步注销等等

版本: UCenter_1.6.0_SC_UTF8  (下载的时候认准 discuz.net)

PHP版本: 5.6 

 

2.接入过程

1  首先解压ucenter软件包,然后可以看到里面有几个文件夹 分别是 advanced  readme  upload  utilities

 

2. 然后upload这个文件夹就是Ucenter的服务器端 ,建好数据库,安装好就行,我这边改名为ucserver

 

3.现在我们来实验一下

 

4 还是刚刚的文件夹 里面有一个demo ,在advanced里的examples

 

5 我们把它复制到 服务器的根目录 命名为examples1  ,用http://localhost/examples 访问 。目录结果如下 (ucclient就是examples1,网上来的图,哈哈)

config.inc.php文件和uc_client文件夹(这个在上一级目录),放到自己站点的一个目录下

 

uc_client文件夹,是一个很重要的类库,当然其实他不只是类库,但是他最重要的作用就是给我们提供相应的同步方法,这些同步方法,都是用来通知ucenter server的(也可以认为就是调用ucenter的方法)。

config.inc.php这个配置文件,配置了我们需要的参数的,比如ucenter server的url等等,都是写很重要的参数,在uc.php和uc_client中都会用到。

include没有什么用,这里只是为了让他不报错,加入的。你可以改造uc.php后,将include目录去除。

 

6 现在我们登陆到ucenter的后台  添加应用

 

添加

 

如果是自己做的网站请选其他 ,应用ip一般为空,通讯密钥说一下,它和你的网站根目录的 config.inc.php的这段对应

 

define('UC_KEY', '1234567890');             // 与 UCenter 的通信密钥, 要与 UCenter 保持一致

还有 UC_APPID 也要做好对应,添加后会有一个ID号

define('UC_APPID', 2);

添加提交后,如果提示通讯成功说明成功了。

如果通讯失败,看看网站目录结构是否不正确,然后把ip也加上去

还有uc的连接参数也要正确填写 

 

define('UC_DBHOST', 'localhost');           // UCenter 数据库主机
define('UC_DBUSER', 'root');                // UCenter 数据库用户名
define('UC_DBPW', '');                  // UCenter 数据库密码
define('UC_DBNAME', 'uc');              // UCenter 数据库名称
define('UC_DBCHARSET', 'utf8');             // UCenter 数据库字符集
define('UC_DBTABLEPRE', 'uc.uc_');          // UCenter 数据库表前缀

 

3. 实验一下

3.1 弄好后,我们在 http://localhost/examples/ucexample_1.php注册一个xiaoming ,然后到ucenter后台的用户管理看看是否注册成功

 

3.2 我们把上面的examples1 再复制一份出来,命名为examples2 吧。注意配置好应用,并通讯成功。这样就能模拟多一个站点出来

 

3.3 好了,做好上面的准备工作后。我们用xiaoming登陆一下 (http://localhost/examples2/ucexample_1.php?example=login)

 

3.4 我们再回去看看 http://localhost/examples1是否也同步登陆了。

如果不行,有可能是cookie冲突了。 把 examples2下的uc.php里的synlogin方法里 的cookie的名字改一下

 

我这里改为Example_auth2了 ,因为examples1的是Example_auth

 

3.5 上面的只是单纯cookie登陆,没有连接数据库,需要的可以看看demo里的code文件夹的 login_db.php  

 

3.6 同样的,同步注册点击demo里的注册就好了

 

 

4.代码分析

为什么可以同步呢

我们来看看demo里登陆过程

list($uid, $username, $password, $email) = uc_user_login($_POST['username'], $_POST['password']);
setcookie('Example_auth', '', -86400);
if(!$db->result_first("SELECT count(*) FROM {$tablepre}members WHERE uid='$uid'")) {
    //判断用户是否存在于用户表,不存在则跳转到激活页面
    $auth = rawurlencode(uc_authcode("$username\t".time(), 'ENCODE'));
    echo '您需要需要激活该帐号,才能进入本应用程序<br><a href="'.$_SERVER['PHP_SELF'].'?example=register&action=activation&auth='.$auth.'">继续</a>';
    exit;
}
//用户登陆成功,设置 Cookie,加密直接用 uc_authcode 函数,用户使用自己的函数
setcookie('Example_auth', uc_authcode($uid."\t".$username, 'ENCODE'));
//生成同步登录的代码
$ucsynlogin = uc_user_synlogin($uid);
echo '登录成功'.$ucsynlogin.'<br><a href="'.$_SERVER['PHP_SELF'].'">继续</a>';
exit;

1.  首先 1 -8 行就是判断账号的正确性了

2.  然后生成cookie

3.  重点来了最后调用这个方法  uc_user_synlogin 同步其他应用,意思是我这边已经登录了,你也设置cookie登陆吧

4. 调用这个方法后 ucenter就会 通知到其他应用,如 examples2应用下的 api下的uc.php下的  synlogin 方法

5 .那我们再来看看 这个 synlogin 方法

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'));
}

可以看出这个方法接受到uid和username这些参数后,生成了cookie

就获得了 登陆状态。

当然了不同的cms和网站,cookie的名字和生成cookie的值的方式是不一样的

这个需要根据具体需求二次开发

6. 除了同步登陆  还有同步注册,同步登出等等,具体看demo了

 

5. 关于cookie的跨域设置问题

由于ucenter的同步登陆主要是用cookie来实现,这里就涉及到一个跨域问题。

所以在二次开发的时候注意不要删掉这个,这个是拿来解决跨域问题的。

 

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

 

 

6.参考链接

原理:

https://www.iteye.com/blog/xuebingnanmm-627840

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章