|
  
- 帖子
- 182
- 精华
- 1
- 威望
- 862
- 金钱
- 0
- 石币
- 0
- 阅读权限
- 200
|
楼主
发表于 2010-1-5 23:47
| 只看该作者
Ucenter/Discuz与Joomla深度整合完全解决方案:版本2
Ucenter/Discuz与Joomla深度整合完全解决方案:版本2安装说明(入门新手完全版)
附件内包含了需要用到的所有文件!
此内容适合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安装根目录):
api_rev2.zip(后面的附件内有)
如何在ucenter中添加一个应用与joomla连通?
注意,请在ucenter控制后台添加一个应用,自定义参数,名字为joomla,应用的url填类似这样的
http://j15ucenter.treeber.net
通信密钥就是咱们在configuration_uc.php中设置的那一长串,这儿咱们设的是
dfjsalkfjslakj32142080dasllkj
应用类型选
其他
是否开启同步登录选
是
是否接受通知选
是
现在,在ucenter的应用中看能不能顺利连到joomla了?
5. 说明:如上两步使ucenter对joomla系统发送的登录、注销、注册、更名、改密等消息能被本系统接收;
6. 现在进入关键步骤,我们将使joomla中的登录、注销、注册等事件发送至ucenter中;
请在joomla后台管理界面的插件安装中,安装插件(自动化程序)plugins,并在插件管理界面中启用它,安装包如下:
plu_joomlaucenter.zip(后面的附件内有)
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/com_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的测试和设置
我的做法:采用Discuz注册。
另外,请先检查一下Phpinfo中output_buffering的值,不要设置为off
转自:blog.treeber.com/20090104/500.html
------------补充--------------------
benny
November 24th, 2009 at 7:10 pm
下载demo后, 发现/plugins/authentication/joomla.php中少了下面的内容,建议补充:
加在以下语句之前:
// Initialize variables
$conditions = '';
----------------------------------------------- //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';
- }
- }
复制代码 -------------------
----------------------------
补充一点(转):
本人在实际测试中,开始是没有在导航栏里设置bbs的菜单,分别在两个IE浏览器中输入主站地址:www.csicw.com和[url]www.csicw.com/bbs[/url],在主站里登入登出,bbs里均可正常同步,但在Discuz里登入登出,主站都没反应,这个怪现象我找了很久才找到答案,原来要先在主站的菜单里设置好bbs的进入菜单,在打开主站之后,再从主站的导航菜单中打开论坛,才可以正常的同步。 |
附件: 您所在的用户组无法下载或查看附件
|