与discuz实现同步登陆和注册

之前写过一篇和discuz实现同步登陆的文章,不过距离现在时间太长了,虽然大体的机制都没改变,但是现在看那篇文章感觉不详细,好多细节都没说,这不最近又在搞这个同步登陆的问题,就把最近的心得和之前写的联系起来,整理一个完整的,共享出来,欢迎大家拍砖!

第一步:项目摆放

将ucenter下的 api,uc_client,config.inc.php 这三个文件都拷贝到项目的根目录下

20140926152230

第二步:登陆ucenter后台添加应用

接下来登录到ucenter的后台在【应用管理->添加新应用】选择自定义安装

应用中心2014-09-26T0758Z

应用名称:填写自己网站名

应用的URL:填自己网站的域名

通信密钥:随便填 但是自己要记住啊 (填完以后必须保证和config.inc.php里面的 define(‘UC_KEY’, ‘刚才填的通信密钥’)的值一致)

应用类型:不是下拉表中的就选其它

是否开启同步登录:是

是否接受通知:是

点击提交

将会生成一段 应用的UCenter 配置信息,将此信息复制到config.inc.php中,将

define(‘UC_CONNECT’, ‘mysql’);    // 连接 UCenter 的方式: mysql/NULL, 默认为空时为 fscoketopen()
// mysql 是直接连接的数据库, 为了效率, 建议采用 mysql

//数据库相关 (mysql 连接时, 并且没有设置 UC_DBLINK 时, 需要配置以下变量)
define(‘UC_DBHOST’, ‘localhost’);   // UCenter 数据库主机
define(‘UC_DBUSER’, ‘root’);    // UCenter 数据库用户名
define(‘UC_DBPW’, ”);     // UCenter 数据库密码
define(‘UC_DBNAME’, ‘ucenter’);    // UCenter 数据库名称
define(‘UC_DBCHARSET’, ‘gbk’);    // UCenter 数据库字符集
define(‘UC_DBTABLEPRE’, ‘ucenter.uc_’);   // UCenter 数据库表前缀

//通信相关
define(‘UC_KEY’, ”);    // 与 UCenter 的通信密钥, 要与 UCenter 保持一致
define(‘UC_API’, ‘http://yourwebsite/uc_server’); // UCenter 的 URL 地址, 在调用头像时依赖此常量
define(‘UC_CHARSET’, ‘gbk’);    // UCenter 的字符集
define(‘UC_IP’, ”);     // UCenter 的 IP, 当 UC_CONNECT 为非 mysql 方式时, 并且当前应用服务器解析域名有问题时, 请设置此值
define(‘UC_APPID’, 1);     // 当前应用的 ID

此段代码覆盖

然后点击应用管理里面显示了

20140926155340

 第三步:引用uc文档接口

在项目的相应页面中(根据自己的情况定)引用

include_once ‘config.inc.php’;

include_once ‘/uc_client/client.php’;

这样后就可以随心所欲的应用uc的接口文档啦!

UCenter接口开发文档

 第四步:实现单向登陆

实现从项目登录 ,discuz 也会登录
从项目登出, discuz 也会登出

如果这步不成功,请检查有没有输出同步登录,同步登出的代码。

如果采用的是AJAX登录的话,请把同步登陆登出代码document.write 出来 (未测试,不知道行不行)。

 第五步:实现 双向同步登录

下面来说说双向同步的原理
在discuz登录时会产生一些前缀相同的cookie(如 $_COOKIE[‘1qlM_2132_auth’] ),在自己项目上通过检测有没有这个cookie存在就可以得到登录状态
通过简析这个cookie 可以得到 一段加密后的password 和 uid
然后再由uid 去读取 name 等信息 (不知道对不对,在安全性上不知道可不可行)

下面来讲如何简析这个值
首先在cookie 上会有一个值 $_COOKIE[‘1qlM_2132_saltkey’](前缀可能不一样)这个值很重要
然后另外一个值 存放在discuz目录的config的config_global.php文件中的$_config[‘security’][‘authkey’]
把这两个值连接起来再用 MD5 加密就可以得到加密钥匙
然后就  $userMsg = explode(“\t”, uc_authcode($_COOKIE[‘1qlM_2132_auth’], ‘DECODE’, $key)); //得到加了密的password和uid

第六步:举个实例

下边是一个牛人贡献的一个例子,不过是thinkphp的例子但是没多大关系的,思路是相通的,我相信难不倒各位技术大咖的!




注意:您需要在网站顶部 注册 后,才能下载资源

资源名称:Ucenter和Thinkphp实现接口同步登陆双向.rar

(下载次数:26次)

提示:此资源由PHP学习网整理或原创,转载请注明。QQ群:66357155

作者:PHP学习网,本文 与discuz实现同步登陆和注册 版权归作者,免费文章欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
编辑精选
memcache缓存监控工具memadmin 2302 浏览 2017-05-25
windows下命令行下执行php程序 2159 浏览 2016-09-20
svn switch服务器下svn地址更改 2028 浏览 2016-05-06
Solr4.7创建Core 3434 浏览 2014-03-31

发表评论