41 123
发新话题
打印

Modoer(Mudder) 整合Discuz6.0详细教程(以Dz为统一登录口)兼讲解整合原理

Modoer(Mudder) 整合Discuz6.0详细教程(以Dz为统一登录口)兼讲解整合原理

本教程针对非UCenter整合。disucz论坛仅支持6.0及一下版本。

很多同学一直被系统整合所困扰,下面我仔细的来讲一下整合的原理,并且做个整合Dz的实例。教程不怎么会写,看得懂就行了。

这里讲的是反相整合,就是以Discuz作为会员统一注册,登录,注销。所以mudder的注册,登录和注销动作都要在discuz页面完成。因此我们必须在dz的会员操作页面加入mudder的代码。

mudder提供了一套API整合的文件,其实就2个文件,存放在api目录下,如果你没有也可以到 http://www.mudder.com.cn/bbs/thread-128-1-1.html 去下载,这个文件夹下就2个文件,一个是mudder_passport_server.php,另一个是mudder_passport_client.php;先来解说一下这2个文件的用处。

mudder_passport_client.php:系统整合客户端
mudder_passport_server.php:系统整合服务器端

所谓客户端文件(mudder_passport_client.php),顾名思义就是要拷贝的整合系统(discuz)下的文件;起到什么作用呢,就是传递会员注册,登录,注销等动作到服务器端(mudder_passport_server.php),然后由这个服务器端做出对应的行为,并且再次传递到客户端文件,告诉他完成的情况,成功,失败等。

下面重点来说说客户端文件里的几个参数:
打开这个文件,最好用Editplus,EmEditor之类或者Zend studio 这个的工具,这样不容易因编码问题引起的乱码。
$mud_server_url :这个参数就是服务器端的地址,只有知道了服务器端的地址,才能和服务器端通信嘛
$login_forward:此函数就是当在dz登录成功以后,返回到那里去。这里要说明一下,在Dz登录后,首先会判断一下Dz是不是由登录返回页面,如果有,就不会返回 $login_forward 这参数里的地址。
$reg_forward:注册后,返回到那里去,同上
$logout_forward:注销(退出)后,返回到那里去

$mud_authkey:这个是重点,注意看。这个是mudder的网站加密键,在mudder后台可以看到,会员帐户通过这个加密键来加密并保存到本地Cookie里,一定要和mudder保持一直,在后台->基本设置->通行证(反向整合)可以看到具体值,复制下来,粘贴到这个参数里
$mud_cookiepre:这个也是重点。这个是mudder在本地cookie的前缀,就是一个Cookie的标识,通过这个值来却别其他系统的Cookie和读取Cookie的值,这里要和mudder统一,而不是和Discuz(整合系统)统一了,否者会造成无法正确读取Cookie的值。这个参数的值,可以在mudder系统根目录夏的config.inc.php这个文件里看到,就是$cookiepre这个变量的值,复制到过来粘贴。

$cpath:Cookie的存储范围,一般都是'/'。
$domain:Cookie针对保存的域名。不需要http://www之类的地址符和主机名,例如:mudder.com.cn,本地localhost则留空。

以上讲完了客户端文件内所有参数,并且正确得配置好了所有参数,这个时候,我们就把这个文件复制到discuz系统(整合系统)的根目录下,整合的成败关键就在这个文件上了

既然客户端文件做好了,那就要使用这个文件了,所以下一步我们要修改下discuz(整合系统)的注册,登录和注销的文件代码了。

先改discuz的注册页面代码,文件是 register.php。修改前先备份好。
打开这个文件,为了能使用mudder_passport_client.php这个文件,我们要把他载入进来,放在
复制内容到剪贴板
代码:
require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./forumdata/cache/cache_profilefields.php';
这句代码后面,
代码如下:
复制内容到剪贴板
代码:
// mudder passport --- begin
require_once './mudder_passport_client.php';
// mudder passport --- end
加入的代码里,我做了Begin...end这样的注解,没有任何含义,仅仅是让你看得懂这是自己加入的。好这样就载入了我们的客户端文件,下面我们要做注册处理了。按Discuz的注册流程,填写完注册信息后就提交注册信息来完成注册,我们的mudder注册整合部分代码就要加载那里。

我们通过查找功能,找到“$discuz_uid = $uid;”这句代码,大概在350-360行这里,这里Discuz已经在他的会员表里完成了新用户的添加,我们在“$discuz_uid = $uid;”这句代码的上一行加入mudder的注册代码:
复制内容到剪贴板
代码:
    // mudder passport --- begin
    $dreferer = dreferer();
    $result_sync = SyncMudder($username,$email,'reg',3600*24*15);
    if($result_sync == 'ok') {
       $dreferer = $mud_reg_forward !="" && $dreferer=="" ? $mud_reg_forward : $dreferer;
    }
    // mudder passport --- end
解说一下:
$dreferer = dreferer(); 这句是取得discuz注册后,返回到那个页面的地址的变量($dreferer)
$result_sync = SyncMudder($username,$email,'reg',3600*24*15); 这句则是mudder注册的关键,$username,$email,一看就知道是传递用户名和邮箱地址的,'reg'这个字符是告诉mudder服务器端,这次操作是注册行为的意思,3600*24*15这个是Cookie保存的时间,就是Cookie保存15天。
if($result_sync == 'ok')  在SyncMudder函数传递了注册参数后,服务器端会返回结果,如果返回OK的话,就说明mudder也注册成功了。
$dreferer = $mud_reg_forward !="" && $dreferer=="" ? $mud_reg_forward : $dreferer; 这句代码就是判断$dreferer这个参数时候是有返回地址了,有的话,就根据 $dreferer 返回,没有的话就返回 $mud_reg_forward 这个变量里的地址,这个变量我们前面已经定义过的,在这里就起到作用了。

解释完这里的代码,大家应该基本明白了整合的原理了吧。到这一步,保存一下。就完成了注册部分的整合了。

下面我们要整合登录部分的,文件是logging.php。编辑前先备份哦。
打开文件,同样我们要载入mudder_passport_client.php这个文件,在
复制内容到剪贴板
代码:
require_once './include/common.inc.php';
require_once DISCUZ_ROOT.'./include/misc.func.php';
下面加入:
复制内容到剪贴板
代码:
//mudder passport --- begin
require_once DISCUZ_ROOT.'./mudder_passport_client.php';
//mudder passport --- end
完成了引入后,我们就要在logging.php的登陆处加入mudder的整合代码了。我们找到”if($passport_status == 'shopex' && $passport_shopex)“这句代码,在上面加入我们的代码:
复制内容到剪贴板
代码:
  //mudder passport --- begin
  $dreferer = dreferer();
  $result_sync = SyncMudder($username,"-","login",$cookietime);
  if($result_sync == 'ok') {
     $dreferer = $mud_login_forward !="" && $dreferer=="" ? $mud_login_forward : $dreferer;
  }
  //mudder passport --- end
代码内基本和注册部分是一样的,不同的一出是SyncMudder($username,"-","login",$cookietime)里面的参数,"-"这里为什么要用这个字符呢,这里原本是email的参数,但是discuz登录不需要参数,所以无法取得email的值,所以就只能用"-"来代替,"login"字符就是告诉服务器端本次操作是登录的意思,$cookietime这个变量是用户在登录discuz时选择保存Cookie的时间,这里mudder和discuz的cookie时间保存一直了。这里说明一点。如果你的系统整合前,discuz已经有了一些会员,他在登录的时候,mudder整合文件的服务器端会自动在mudder系统里加入这个会员。

解释好了,我们的登录部分整合就好了。下面就要这个注销(退出)操作的整合了。discuz的注销操作也是写在logging.php这个文件里的,所以我们就继续修改吧。
找到”if($action == 'logout' && !empty($formhash))“这句代码,在比较前面大约在20行左右,在这个条件代码里,discuz会清除Cookie里的内容。

我们就要在这里下手,我们先要修改这个 if 条件,修改成
复制内容到剪贴板
代码:
if($action == 'logout')
为什么要删除 !empty($formhash) 这个条件呢,因为mudder里无法得到$formhash这个变量的值,所以以如果不删除掉,就无法进入这个条件语句了,删除掉不会引起任何安全文件。修改好后,我们在
复制内容到剪贴板
代码:
        if($_DCACHE['settings']['frameon'] && $_DCOOKIE['frameon'] == 'yes') {
                $extrahead .= '<script>if(top != self) {parent.leftmenu.location.reload();}</script>';
        }
这句代码后面加入mudder的整合代码
复制内容到剪贴板
代码:
    //mudder passport --- begin
    $dreferer = dreferer();
    $result_sync = SyncMudder("-","-","logout",0);
    $dreferer = $logout_forward !="" && $dreferer=="" ? $logout_forward : $dreferer;
    //mudder passport --- end
代码很简单,就是告诉服务器端,清空下mudder的Cookie。最后还有一点,把下面这句代码
复制内容到剪贴板
代码:
        if($formhash != FORMHASH) {
                showmessage('logout_succeed', dreferer());
        }
删除了,因为$formhash不需要了,然后修改一下
复制内容到剪贴板
代码:
showmessage('logout_succeed', dreferer());
这句代码,修改为
复制内容到剪贴板
代码:
showmessage('logout_succeed', $dreferer);
保存一下,好了!所有代码修改就全部完成。

---------------------------------------------------------
鉴于很多同学在整合的退出部分出错,我把退出部分的代码全部贴出来。
复制内容到剪贴板
代码:
// $action == 'logout' && !empty($formhash)) -----> mudder modify
if($action == 'logout') {

        if($_DCACHE['settings']['frameon'] && $_DCOOKIE['frameon'] == 'yes') {
                $extrahead .= '<script>if(top != self) {parent.leftmenu.location.reload();}</script>';
        }

    //mudder passport --- begin
    $result_sync = SyncMudder("-","-","logout",0);
    //mudder passport --- end

    /*
        if($formhash != FORMHASH) {
                showmessage('logout_succeed', dreferer());
        }
    */

        clearcookies();
        $groupid = 7;
        $discuz_uid = 0;
        $discuz_user = $discuz_pw = '';
        $styleid = $_DCACHE['settings']['styleid'];

        if($passport_status == 'shopex' && $passport_shopex && $_DSESSION['adminid'] != 1) {
                $dreferer = dreferer();
                $verify = md5('logout'.$dreferer.$passport_key);
                showmessage('logout_succeed', 'api/relateshopex.php?action=logout&forward='.rawurlencode($dreferer).'&verify='.$verify);
        } else {
                showmessage('logout_succeed', dreferer());
        }

} elseif($action == 'login') {
---------------------------------------------------------


下面一个步骤很轻松,进入mudder后台,来到基本设置->通行证(反向整合),打开整合功能,写上对应参数,参数不会写?可以打开这个页面 http://www.mudder.com.cn/bbs/thread-128-1-1.html 找到discuz部分,已经写好了各个操作的地址,修改一下前面的discuz的地址就好了。提交保存。

这样整合就全部做好了。举一反三一下,其他的系统,不管是CMS还是BBS,只要找到他们的会员注册,登录和注销的文件,按照这个原理同样可以做到整合。如果你想整合CMS+Mudder+BBS,根据本人了解,知名的CMS的反向整合和mudder是一样的,所以要做到3套系统整合,例如你要在bbs里完成所有统一登录,只需要把cms和mudder的整合代码统一加入到bbs的注册,登录和注销的文件里。

好累,就写这些吧。以后再写其他教程。

-------------------------------------------------------
还有一点,关于从modoer点击登录,跳转到dz登录,登录后无法返回modoer的问题,主要的原因是dz的dreferer()的问题,这里整合部分没有任何问题。
头大 - 自然人就比较聪慧。

TOP

先搬个凳子来,回头慢慢看。

TOP

从头到尾.好认真看了看.发现聪慧兄你没有写上整合成功的演示站呢.

TOP

引用:
原帖由 翼飞 于 2008-3-4 22:35 发表
从头到尾.好认真看了看.发现聪慧兄你没有写上整合成功的演示站呢.
被你打败了。可惜过了编辑时间了。
头大 - 自然人就比较聪慧。

TOP

回复 4# 的帖子

而且你也没有抢到二楼.郁闷郁闷啊.
不怕不怕,你就编辑吧.叫管理员编辑了你编辑过的帖就可以,可以把那个时间给去掉的呢.~ .偶皮真厚.

TOP

不知道说什么

TOP

学习中....

好帖是一定要顶的

TOP

参观参观,学写学习
支持支持,鼓励鼓励
我是歌特

TOP

这个挺好的!!

一定要支持

但如果是正向整合呢?就是MUDDER注册之后 写入DZ?

TOP

正向整合dz,已经集成在mudder上了,可以在后台->基本设置->discuz设置。

TOP

正式版啥时候发布啊?
加油啊,moufer!
打开极速,更要稳定!

TOP

没有概念,能做个演示吗?如把论坛和宁波吃饭网整合

TOP

整合了,在论坛登陆不到点评网是为什么,一直在论坛。而且点评站也显示没登陆

TOP

不错                         .

TOP

反向整合后用户点评的空间、积分助理,还有金币都还能用吗?

TOP

引用:
原帖由 min1 于 2008-3-10 23:35 发表
没有概念,能做个演示吗?如把论坛和宁波吃饭网整合
看这个演示:
http://shop.fuyang168.com
http://www.fuyang168.com

TOP

整合了,在论坛登陆不到点评网是为什么,一直在论坛。而且点评站也显示没登陆


我的也是这样
怎么解决

TOP

我晕,我的DZ是UC版的,怎么整合啊?

完成了引入后,我们就要在logging.php的登陆处加入mudder的整合代码了。我们找到”if($passport_status == 'shopex' && $passport_shopex)“这句代码,在上面加入我们的代码

if($passport_status == 'shopex' && $passport_shopex)“ 在UC版DZ论坛里没有这一句。

TOP

UC的版本,请等待4月底的modoer正式版

TOP

各位老大,还是没办法退出啊!!!

TOP

 41 123
发新话题
最近访问的版块