- 论坛徽章:
- 54
|
二十六:Claroline与ucenter整合:
http://wuxc.ntzx.cn/cLUC/claroline_UC.html
claroline与Ucenter整合
http://wuxc.ntzx.cn 江苏省南通中学 吴晓春
一、UC整合的基本原理: (摘自互联网,稍作修改。)
以用户登录为例介绍,其它注销,改密码,注册等均类似。
1、当用户xxx在某一应用程序的login.php,输入用户名,密码。可以login.php适当之处,调用UC_CLIENT目录下的 clint.php中的uc_user_login函数到UC_CENTER验证此用户和密码,如正确,则写入session,写入cookies,并更新应用程序会员表中的登录ip,登录时间。
2、 然后调用uc_user_synlogin通知UC_CENTER 用户xxx登录成功。
3、 UC_CENTER收到登录成功消息后,把xxx登录的消息,发给所有愿意接收(在UC_CENTER 中开启同步登录的其它应用)这个消息的其它应用程序。其实就是带参数访问一下各应用程序的api目录下的uc.php,用户感觉不到这个过程。
4、 各应用程序靠api目录的下的uc.php来接收UC_CENTER发来的消息,并对UC_CENTER言听计从,让干什么就干什么。现在,收到让xxx用户登录命令,马上执行。一般通过写本应用程序的session来实现登录,这需要掌握该应用程序的源码并修改。
5、最后所有与uc整合的程序,xxx均登录成功。用户从一个应用 跳到另一应用,同样显示登录。因为它们在后台均已登录。
6、应用程序与UC_CENTER的会话结束。
二、UC、Claroline、Uchome安装
此处以上Claroline 1.9rc5 与UCenter1.5、uchome1.5整合为例,说明整合的具体代码改写。运行环境为XAMPP for Windows 1.7.1。安装配置、及在UCenter中添加应用等不再赘述,请参见下图。请注意这几个软件统一使用UTF8或GB2312版本。
安装后的目录结构:
在Ucenter中加入应用后,该应用根目录下会有config.ini.php,可以打开仔细观察,看看有没有参数需要手工修改的。
三、代码修改
在 htdocs/claroline/下创建api、uc_client目录及相关文件,亦可从UC给的示例中或uchome目录下复制过来再修改相应文件。在api下创建uc.php文件,它的作用是接收Uenter发过来的消息,并通知claroline完成相应操作。uc_client目录下主要有 clinet.php文件,其作用把向Ucenter发送消息 。
1、从最简单的开始------退出登录
A 前台退出登录:在 htdocs/claroline/index.php的第42行插入三行。
B 后台同步退出:
Claroline接到退出通知,执行 htdocs/claroline/api/uc.php文件中第244~247行的内容,即后台登出。
2、登录:
A 前台登录:
①激活用户:ucenter已有用户账号,而claroline中没有,当前用户第一次登录Claroline,称为激活用户账号。过程是当用户在 claroline界面上输入用户名、密码后,先要能过uc_user_login($login, $password)到Ucenter中验证,若Ucenter验证通过,则认为在登录成功,并把该账号加入到claroline的数据库中完成激活。代码如下:
②通知ucetner及其它应用同步登录:修改 htdocs/claroline/claroline/auth/login.php如下
上述文件中,267行以后代码会调用 claro_redirect()函数,请在htdocs/claroline/claroline/inc/lib/claro_main.lib.php的第1507行修改如下,以便顺利跳转。
B 后台同步登录:接到ucenter通知,执行uc.php中相应代码实现登录。
3、用户注册(同时登录)与激活
A 用户注册,①修改\claroline\auth\imscription.php如下:
这里要注意,默认情况下Ucenter中Email是必填的、而Claroline是可以不填。所以,请以管理员登录到Claroline中“本平台的配置->个人资料”的界面下修改Emai在注册时为必填信息。
请把claroline/inc/lib/user.lib.php的第126行,修改为第127行如下所示:
126 //$sql = "INSERT INTO `" . $tbl['user'] . "`
127 $sql = "REPLACE INTO `" . $tbl['user'] . "`
修改这个语句的作用是确保用户的“userid”在不同的ucenter、claroline中是一样的。
此时,其它应用中如uchome中还不知道有了新用户,当这个新用户第一次登录uchome就激活。
②用户完成注册后,应该同时完成同步登录。请修改imscription.php中的第210到217行,如下。
B 激活
当用户在Ucenter中注册或uchome中注册了,在第一次登录到Claroline时激活(用户账号会加入到Claroline的用户表中)。
4、管理员添加用户
管理员添加用户,与用户注册相类似。请修改claroline\claroline\admin\adminaddnewuser.php的第77行到103行,如下
同样,其它应用通过激活来完成这个新用户的添加。
5、用户信息修改
A Claroline->Ucenter :管理员或用户自己都可修改个人信息,分别在文件claroline\claroline\admin\adminprofile.php的 167~184行及claroline\claroline\auth\profile.php的199~215行。内容相近,如下:
B Ucenter->Claroline:在Ucenter端修改用户名或密码,通知Claroline作相应修改。在uc.php中,如下:
注意,默认情况下,Ucenter系统(ucenter、uchome、discuz等)中密码是保存在Ucenter中的,登录验证仅在 ucenter中进行。修改密码后也不通知其它应用(如uchome等),如下所示,上半段是ucenter\control\admin \user.php的代码;下半段是uchome\api\uc.php的代码。
上半段修后的291行,完成了ucenter向uchome、claroline等应用传递新的密码明文。claroline就可接收并修改,而uchome忽略。
同时,Ucenter\control\user.php的第99~101行作同样修改。
6、删除用户
A Claroline->Ucenter :在Claroline删除用户,并通知Ucenter,如下修改两个文件。
B Ucenter->Claroline :仅有思路:先用代码模拟管理员登录Claroline,再用@fsockopen()函数调用 claroline/claroline/admin/adminuser.php?cmd=delete&user_id=$_uid& amp;offset=0来实现,未最后成功。代码如下:
} elseif($action == 'deleteuser') {
!API_DELETEUSER && exit(API_RETURN_FORBIDDEN);
$_uid = 1;
$_username='admin';
$_password='mzdmzd';
//模拟登录的代码,请参见uc.php的第110行。
$_uid = $get['uid'];
echo get_page_content_get("http://192.168.8.20/claroline/claroline/admin/adminuser.php?cmd=delete&user_id=“.$_uid.”&offset=0"
function get_page_content_get($url){
$url = eregi_replace('^http://', '', $url);
$temp = explode('/', $url);
$host = array_shift($temp);
$path = '/'.implode('/', $temp);
$temp = explode(':', $host);
$host = $temp[0];
$port = isset($temp[1]) ? $temp[1] : 80;
$fp = @fsockopen($host, $port, &$errno, &$errstr, 30);
if ($fp){
@fputs($fp, "GET $path HTTP/1.1\r\nHost: $host\r\nAccept: */*\r\nRefererurl\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\nConnection: Keep-Alive\r\n\r\n"
}
$Content = "";
while ($str = @fread($fp, 4096)){
$Content .= $str;
}
@fclose($fp);
return $Content;
}
exit(API_RETURN_SUCCEED);
}
好了,就完成了这些。请高手指导。
[ 本帖最后由 lsstarboy 于 2009-6-26 10:04 编辑 ] |
|