此内容适合Joomla!1.5版本
2009.11.23日,直接将演示站点全站打包供下载。请点击此处下载文件包。请点击此处下载数据库包。注意,无需对数据库进行任何改动。关于文件,只需比照本文查看某日期后改动的文件即可。
2009.07.19晚再次修订,现在本文结尾处所声称的点已经全部实现。下载文件均已更新,对plugins/authentication/joomla.php文件的更改有所添加。请详读内文。
2009.07.18/19更新,修正在附件不能下载的问题,架设了测试网站。因为测试站点使用J1.5.12,因此,所有附件均有变更。请重新下载所有附件。
测试站点在:http://j15ucenter.treeber.net/
注意:本措施可能仍不适合有大量数据的生产环境用户,最好ucenter与joomla两表中的用户用户名不冲突。若有冲突,可自行想办法解决,或确定两个用户用户名email都一致。若用于生产环境,请仔细测试并自行负责。
感谢jet,感谢Jianer和动漫CG同学,我已经修正了代码中的单引号问题和大量其他问题。另外,若有整合不成功者,可以在本文下贴出网址或直接加我QQ2717438或在群里讨论,我将提供协助,以首先让其中几个正常运转。而后,望大家帮助大家。
1. 安装ucenter(请下载最新版本)及discuz(6.1for ucenter版本及以上,7.0版本亦可),遵照康盛创想官方说明,若对此步骤有所疑问,有两个joomla的QQ群内的热心网友应该可提供免费指导:27974098及44088499;
此步骤请注意,请确保复制了一个uc_client的文件夹到joomla安装根目录,这是ucenter的客户端程序库(感谢freeman提醒)。
2. 说明:若已经安装discuz,则请安装ucenter并照安装步骤提示整合discuz;
3. 在joomla安装根目录下放置文件configuration_uc.php,文件内容如下(按照文件中的注释修改数据库名及密码等配置参数,其中省略号的项目必须调整,其他项目据情况调整):
<?php
define('UC_CONNECT', 'mysql'); // 连接 UCenter 的方式
define('UC_DBHOST', 'localhost'); // UCenter 数据库主机
define('UC_DBUSER', 'dbuser'); // UCenter 数据库用户名
define('UC_DBPW', 'password'); // UCenter 数据库密码
define('UC_DBNAME', 'dname'); // UCenter 数据库名称
define('UC_DBCHARSET', 'utf8'); // UCenter 数据库字符集
define('UC_DBTABLEPRE', 'dbname.uc_'); // UCenter 数据表前缀
define('UC_DBCONNECT', '0'); // UCenter 数据库持久连接
define('UC_KEY', 'dfjsalkfjslakj32142080dasllkj'); // 与 UCenter 的通信密钥
define('UC_API', 'http://j15ucenter.treeber.net/ucenter'); // UCenter URL
define('UC_CHARSET', 'utf-8'); // UCenter 的字符集
define('UC_IP', '124.254.31.111'); // UCenter 的 IP
define('UC_APPID', 2); // 当前应用的 ID,根据后台添加的joomla应用不同而不同
?>
4. 在joomla安装根目录下创建api文件夹,放置如下两个文件(可直接将下面文件解压至joomla安装根目录):
如何在ucenter中添加一个应用与joomla连通?
注意,请在ucenter控制后台添加一个应用,自定义参数,名字为joomla,应用的url填类似这样的
http://j15ucenter.treeber.net
通信密钥就是咱们在configuration_uc.php中设置的那一长串,这儿咱们设的是
dfjsalkfjslakj32142080dasllkj
应用类型选
其他
是否开启同步登录选
是
是否接受通知选
是
现在,在ucenter的应用中看能不能顺利连到joomla了?
5. 说明:如上两步使ucenter对joomla系统发送的登录、注销、注册、更名、改密等消息能被本系统接收;
6. 现在进入关键步骤,我们将使joomla中的登录、注销、注册等事件发送至ucenter中;
请在joomla后台管理界面的插件安装中,安装插件(自动化程序)plugins,并在插件管理界面中启用它,安装包如下:
8. 请修改如下两个joomla文件,注意修改前请备份文件为joomla.orig.php和controller.orig.php
针对 /plugins/authentication/joomla.php
约86/88行,将
$testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
改为
if($options['checkpassword']=='skip')
$testcrypt = $crypt;
else
$testcrypt = JUserHelper::getCryptedPassword($credentials['password'], $salt);
同样是此文件,在开始处
jimport( 'joomla.plugin.plugin' );
后面添加
//added by afo...
include_once(JPATH_ROOT.DS."configuration_uc.php");
include_once(JPATH_ROOT.DS."uc_client".DS."client.php");
include_once(JPATH_ROOT.DS."api".DS."func_joomla_cb_user.inc.php");
//added by afo...end
针对 /components/user/controller.php
请记住这两个位置
在约138行(在Joomla! 1.5.12中是第148行)
// Redirect if the return url is not registration or login
if ( ! $return ) {
$return = 'index.php?option=com_user';
}
$mainframe->redirect( $return );
还有约175行(在1.5.12中是约185行)
// Redirect if the return url is not registration or login
if ( $return && !( strpos( $return, 'com_user' )) ) {
$mainframe->redirect( $return );
}
修改:
138/148行的改为:
// Redirect if the return url is not registration or login
if ( ! $return ) {
$return = 'index.php?option=com_user';
}
//added by afo...
exit('<script language="javascript">window.alert("login success");window.location.href="'.$return.'";</script>');
$mainframe->redirect( $return );
请注意:175/185行的改为:
exit('<script language="javascript">window.alert("logout success");window.location.href="'.$return.'";</script>');
// Redirect if the return url is not registration or login
if ( $return && !( strpos( $return, 'com_user' )) ) {
$mainframe->redirect( $return );
}
注意,本步骤中,必须修改核心文件。
7. 按如下措施检查登录:
从discuz中登录后进入joomla看系统是否登录;
从joomla中登录后进入discuz看系统是否登录;
分别从两个系统登录,在discuz中注销看系统是否完全注销;
分别从两个系统登录,在joomla中注销后看系统是否完全注销。
其他改密、改名等也均请测试。
8.已知实现和问题:
·可由joomla中注册,ucenter其他应用中(以下简称ucenter)中将同步添加
·可由joomla中登录退出,ucenter将同步登录退出;
·可由joomla中修改/重置密码,ucenter可有新密码;
·可由DZ或其他ucenter应用中(以下简称DZ)注册,登录后joomla中将同时有新用户(不论在何处登录);
·可由DZ登录退了,Joomla将同步登录退出;
·可在DZ/Ucenter中改密码,Joomla将同步更改密码
·可在Joomla中删除和修改用户资料,Ucenter将同步删除或更改资料(Email)
--已知若在DZ中注册后,没有再次登录,则Joomla中若注册同名用户系统会给出提示,但界面过于简单
--已经Ucenter中删除用户后不会通知Joomla,而程序中当时暂无判断Joomla中用户是否被删除
--若在joomla后台设置需要验证,则用户登录时仍然提示成功,实际上未登录,这似乎是1.5.12的bug
--在退出后DZ有时会显示用户仍然在状态,但可能会提示用户“您没有登录”,或者点击后才消除登录状态
为了规避问题,建议如下:
^最好只开启某一个应用的注册链接
^建议Joomla不需用户验证,DZ需要用户验证或采用验证码
^仅在Joomla中删除用户
^需要更多针对DZ的测试和设置
另外,请先检查一下Phpinfo中output_buffering的值,不要设置为off
我需要更多反馈。请大家试用测试站点。

关注WEB应用系统架构,侧重效能、可用性研究。欢迎访问treeber.com查看本站整理自网络的非原创精华(筹建中)。
freeman
January 4th, 2009 at 4:46 pm
感谢作者!每天刷新一次你的博客,就等这篇文章啊!
强烈期待纯插件版本!
joomla
January 5th, 2009 at 8:21 am
期待!
jianer
January 5th, 2009 at 11:48 am
确实期待这样的插件,你在哪里,我给你送啤酒去。
ufonba
January 5th, 2009 at 1:36 pm
非常期待,想不到有这么好的东西。再一次说,谢谢站长。
Charlie
January 5th, 2009 at 3:01 pm
强烈期待作者早日完成此文章
joomla
January 5th, 2009 at 4:52 pm
来济南请你吃饭
next001
January 5th, 2009 at 6:32 pm
确实是很好的消息。
我的名字
January 6th, 2009 at 11:47 am
现在就是在等待你的这个插件了,你拯救了亿万民众的心那
eexoo
January 7th, 2009 at 7:51 pm
非常好的东西,期待中.
name
January 8th, 2009 at 11:40 am
非常期待能有现成的
ufonba
January 8th, 2009 at 6:19 pm
每天一留言,生活更美好
支持!
January 9th, 2009 at 9:59 am
支持!
what
January 10th, 2009 at 9:39 am
都过去这么久了,怎么还没公布出来,也许又要等数个月了,如果不确定日期,别刊登啊,很揪心的等。
jet
January 12th, 2009 at 7:39 am
有语法错误,纠正下吧。 ‘ " '
jet
January 12th, 2009 at 2:15 pm
整合不成功。作者在检查下吧。
freeman
January 12th, 2009 at 3:14 pm
强烈期待纯插件版本!
cirart
January 14th, 2009 at 1:37 am
强烈期待纯插件版本!+1
Jackyking
January 14th, 2009 at 10:47 am
请问站长dz的密码加密算法是什么样的呢,vbb是单纯的二次加密,md5(md5($password).$salt),dz又是怎么样的呢,能不能绕过ucenter来整合dz呢?
wuqi
January 14th, 2009 at 4:53 pm
虽然和ucenter整合通信成功了,不过同步登陆没有实现。请再改进一下。
lifeng
February 18th, 2009 at 3:54 pm
首先感谢站长的辛苦! 小第真的很佩服站长的大度和技术!!
小弟用以上方法整合了,不成功,很遗憾,强烈期待纯插件版问世!
先谢谢站长了!!
sigohome
February 23rd, 2009 at 1:20 am
uc和joomla注册、登录、注销的同步正常,但discuz与joomla无法同步
zwj105
February 28th, 2009 at 11:41 pm
注册页出现:
E_NOLOGIN_BLOCKED
E_NOLOGIN_BLOCKED
不能注册.
论坛注册正常,但不能互访。
xiaoxiao
March 9th, 2009 at 3:17 pm
与ucenter通信失败,无法实现同步登录与登出...
期待博主能尽早更新...
psliaowen
March 26th, 2009 at 4:35 pm
楼猪太好了,这么好的东东,感谢~~~~~~
chiang
March 27th, 2009 at 6:12 pm
两个系统还是独立的,整合失败。可能是我的configration_uc.php设置问题。
define('UC_APPID', 2); // 当前应用的 ID
请问这个ID是plugin在后台显示的id号吧?怎么弄都不成功。 我是新手55
chiang
March 27th, 2009 at 6:13 pm
期待主人开发一个桥接器。谢谢!
kingweo
April 5th, 2009 at 3:09 am
UCenter 应用 ID 3 Joomla! 通信成功
可是登陆提示IE却显示
Error:No database selected
Errno:1046
SQL::SELECT value FROM uc_vars WHERE name='noteexists3'
求解?
kingweo
April 5th, 2009 at 3:12 am
是http://^^^^/index.php?option=com_user页面显示的问题
sadshell
June 13th, 2009 at 2:28 pm
“点此下载plu_joomlaucenter.zip”
这个不能下载啊
麻烦解决下
husw
July 3rd, 2009 at 6:57 pm
附件都不能下载了?
jianer
July 20th, 2009 at 8:29 pm
终于成功了,已经可以实现同步登陆、登出。华人最大暗黑艺术网感谢kolidon。按照教材直接做下来,即可。
感谢!
cz232
July 23rd, 2009 at 8:08 am
你好,我弄好久还是不行,虽然UCenter中添加应用程序里显示joomla通信成功,但是登入,注销等其他都没办法同步,不知道那里出问题,还请多赐教啊!!
yi_xiao
July 27th, 2009 at 4:17 pm
赞博主的有始有终,你满怀热诚第一个将Joomla与UC整合从想法到开始。
并且一直坚持不懈尝试将Joomla与UC完美整合,这种做事方式让人很尊敬。感谢你的努力,虽然之前对于UC与Joomla的整合抱非常怀疑的态度,但看到你的成果,还是特别感动。做得真棒!
alex
July 30th, 2009 at 1:54 am
我使用api/uc.php添加时,ucenter提示我版本太低,请问是什么原因?
luoyang
August 4th, 2009 at 5:41 pm
按博主说的设置,提示joomla应用通信失败。多次尝试都如此。哭...
lijinglue
August 8th, 2009 at 12:56 am
对于提示版本低的,打开UC.php把版本号改下就可以了。
lijinglue
August 8th, 2009 at 1:27 am
博主啊,请问下通讯成功但是无法使用UC已经有的用户登录步是怎么回事呢?
dolphin013
August 18th, 2009 at 3:28 pm
博主,我先装了uc+uh+dz三合一的整合版,然后再装joomla,接着安照你的文章步骤进行uc与joomla的整合,但始终显示通信不成功,如何解决呢?
zc
August 19th, 2009 at 5:58 pm
connections through ucenter application halts (just shows connecting... always)
is it right that I copied uc_client from forum to joomla root
maxco
August 21st, 2009 at 5:34 pm
整合不成功 测试站点的论坛链接在哪里?
bluedragon
August 24th, 2009 at 1:42 pm
谢谢楼主的努力,毫无疑问这篇文章对很多人都是很期待的,jfusion将要在接下来的几个星期推出1.2版,如果其对phpbb和jomsocial得支持完整的话,我还是选择jfusion.不过依然感谢你的工作,discuz是很好的论坛程序,结合joomla将可填补康盛的supesite再cms方面的先天不足。同时一旦可以让joomla与ucenter通信的话,也就有了可能让其与uchome,ecshop等通信,至少是有了这个希望。
bluedragon
September 4th, 2009 at 9:05 pm
没有下文了?、 同时我想加入上面两个提供的qq群,居然已经设置为拒绝加入新人了,看来是太火爆了
bluedragon
September 8th, 2009 at 2:26 pm
http://j15ucenter.treeber.net/
关于上面的测试网站找不到论坛的问题。
在joomla 里面没有给出论坛的链接,其实论坛已经在上面了
http://j15ucenter.treeber.net/bbs就是连接地址,
希望不能加入qq群的可以再论坛里面将自己的问题反馈出来
梅尚程旬
September 16th, 2009 at 10:22 pm
没能整合成功~提示"通信失败"..
youlingfu
September 26th, 2009 at 6:48 pm
按照博主的方法做了,ucenter 应用管理也显示通信成功,但在登陆的时候却出错。
而且,在ucenter通知记录里看也看到,通知全部失败。。。。
博主能帮下我么?
QQ:411294842
email:gg8280525@qq.com
kolidon
September 28th, 2009 at 10:00 am
http://j15ucenter.treeber.net/bbs
这个是测试站点的论坛位置。
kolidon
November 6th, 2009 at 1:48 pm
我不太懂为什么有这么多朋友测试失败。
测试成功的同学都能不能站出来说句话?
两周内,应该会公布一个生产网站中应用此案例的网址。
divivityan
November 18th, 2009 at 4:18 am
还是期待jfusion插件桥接啊
希望能预告下啥时候出呢?
benny
November 18th, 2009 at 8:44 pm
如由 joomla 註冊, 能在 discuz 登入及同步.
但如果由 discuz 註冊, joomla 卻不能登入 (joomla 後台未能找到 discuz 所註冊的人)
請幫忙解決
所用的是 joomla 1.5.15 及 discuz 6.1 / 7.1 / ucenter 1.5
benny
November 19th, 2009 at 2:21 pm
终于成功了,但如果在 discuz 修改密码,joomla 不能同步,请帮忙解决
谢谢
mobile
November 24th, 2009 at 11:25 am
如由 joomla 註冊, 能在 discuz 登入,
但如果由 discuz 註冊, joomla 卻不能登入 (joomla 後台未能找到 discuz 所註冊的人)
請幫忙解決
所用的是 Joomla! 1.5.15 Stable [ Wojmamni Ama Mamni ] 05-November-2009 04:00 GMT 及 discuz 7.2 / ucenter 1.5
我的 QQ = 1160282493
kolidon
November 24th, 2009 at 11:32 am
将在今天下午将所有内容(网站和数据库)打包发布。
benny
November 24th, 2009 at 1:32 pm
感谢,期待打包档案給我們
benny
November 24th, 2009 at 7:10 pm
下載 demo 後, 發現上文教學中少了這一段
/plugins/authentication/joomla.php
----------------------------------------------
//added by afo...
//if exists in ucenter, add it in joomla
if(uc_user_checkname($credentials['username'])==-3){
$activeuser = uc_get_user($credentials['username']);
//var_dump($activeuser);exit('33');
checkuserexists_user($activeuser);
//if the password is right in ucenter, pass through the joomla auth
$arrResult = uc_user_login($credentials['username'] , $credentials['password']);
if($arrResult[0]>0){
$options['checkpassword']='skip';
}
}
uniwant
December 1st, 2009 at 6:31 pm
太厉害了,非常佩服作者技术以及共享之精神。
cshuo
December 7th, 2009 at 10:17 pm
佩服楼主的水平!
博主能说明一下楼上benny说的问题吗?
hilelen
December 17th, 2009 at 3:50 am
嗨,我的discuz版本应该是 7.2,ucenter 版本是1.5.0,我按照上面的步骤做了,discuz通信成功了,joomla 却一直是通信失败的状态,我也把 uc.php 内的版本号改成1.5.0了,依然一直是通信失败,无法连接,请问是哪里出了问题呢?
hilelen
December 17th, 2009 at 3:54 am
请接上面,忘了补充,在ucenter 要连接 joomla 时一直出现的回应讯息是版本太低。
wl3768
January 6th, 2010 at 6:15 pm
问一下 你现在这个包里的都是UTF8, 我现在的论坛都是GBK的,这样数据导过来会不会有问题!还有就是我现在手动安装了三边了joomla都是不连通信,有没有简单的方法通信呢?
oubeichen
January 10th, 2010 at 11:28 am
谢谢了!
mail
January 20th, 2010 at 4:02 pm
api_rev2.zip 中uc.php定义了一个 define('UC_API', 1);
configration_uc.php中又定义了一个 define('UC_API', 'http://j15ucenter.treeber.net/ucenter'); // UCenter URL 导致ucenter返回status返回一个重定义错误,因为出现通信失败
aiwens
January 31st, 2010 at 10:13 pm
我的discuz版本是 7.2,ucenter 版本是1.5.0,我按照上面的步骤做了,但只能joomla登录,DZ同时登录,而在DZ先登录,刷新joomla却没有登录成功,也就是说只能单边,这个方法是不是不适用于DZ7.2版啊?
aiwens
February 1st, 2010 at 9:52 pm
准确的说,我应该是整合成功了,但是在IE6浏览登录就只能从joomla上登录,DZ可显示登录,从DZ登录,joomla不能显示已登录,换浏览器就可以完全同步
aiwens
February 2nd, 2010 at 7:46 pm
终于在IE6下可同步,原来要在joomla后台设置一个bbs的菜单,只有从菜单中打开DZ,才可以在DZ中登录,刷新joomla就可以同步。如果两个独立的浏览器框中,一个输入joomla主页地址,一个输入bbs的地址,再在bbs主页里登录,这时刷新那个joomla主页的登录是没有反应的,怪不得如鬼魅般时行时不行,呵,多谢博主了,继续努力!
oboshop
February 21st, 2010 at 8:22 am
新年好,我按照你的方法链接成功,但是论坛登录后,joomla并没有登录。直接用论坛的用户名和密码登录joomla也不行,说是没有这个用户。
我的discuz是7.0, joomla是1.5.14+virtuemart.
在修改的时候有一个文件夹名字和楼上例子说的不一样,我这里是/components/com_user/controller.php, 例子里是user文件夹/components/user/controller.php
请高手指教!