Discuz X3.2和phpcms v9.5.9 相互同步登陆注册退出 详细版

最近闲来无事,打算用discuz 和phpcms 做站,里面涉及到 discuz ,phpcms,ucenter 相互通信的问题,本人做个小教程供大家参考,水平有限,请多包涵^_^。

本次测试使用的是Discuz X3.2,Phpcms v9.5.9和ucenter,因考虑到以后的扩展,所以单独把ucenter独立安装,如果没有其他考虑的话可以不用独立安装ucenter,可直接使用discuz内置的ucenter.

<——————- 此处高手可忽略 start———————–>

安装这3样以后在ucenter 的应用管理内添加phpcms应用

然后

应用类型选择“其他”

应用名称:phpsso           //此处可以自定义

应用的主URL: http://你的域名/phpsso_server    //注意又要多朋友粗心会忘记在域名后加phpsso_server导致通信失败

是否开启同步登陆和是否接受通知全部选“是” 然后提交

你会得到一个通信秘钥,

<——————- 此处高手可忽略 end———————–>

第一步会发先phpcms与ucenter通信失败。

解决方法:登陆phpcms的phpsso——>系统配置——–>UCenter配置

是否启用: 选择“是”

Ucenter api 地址:http://你的域名     //不要带反斜杠 “/”该地址为ucenter的根目录可以根据需求修改,如果你的UCenter 是直接内置discuz里面那么地址为 http://论坛地址/ucenter

其他的数据库主机名,用户名,密码 ,按自己的实际情况正常填写

注意:Ucenter 数据库表名前缀 不能直接写表名前缀,例如:我的数据库名为 zhudo ,ucenter的表面前缀为uc_  那么Ucenter 数据库表名前缀 填写为 `zhudo`.uc_  ,  `zhudo` 的单引号为英文返单引号 在横排数字键盘1 的左边。

 

最后填写 应用id (APP ID) 和UCenter 通信秘钥 ,这两项可以在UCenter 应用管理里面获取。

 

第二步

你会发现 phpcms登陆 可以同步到 discuz

Phpcms退出 无法同步到discuz

Discuz登陆 无法同步到phpcms

Discuz退出 无法同步到phpcms

 

解决办法:

  • Phpcms退出 无法同步到discuz  在phpcms的phpsso_server/phpcms/modules/phpsso/classes/phpsso.class.php 文件的__construct 函数里面, 由于解析出来post[data]为空情况下的直接的exit操作,导致javascript语句无法输出,简单的做法只要注释掉 exit

 

示例如下:

if(isset($_POST[‘data’])) {

parse_str(sys_auth($_POST[‘data’], ‘DECODE’, $this->applist[$this->appid][‘authkey’]), $this->data);

if(empty($this->data) || !is_array($this->data)) {

// exit(‘0’);  //就是修改这里

}

} else {

exit(‘0’);

}

通过以上操作phpcms退出就可以同步到discuz了

 

第三步:

目前状态 phpcms登陆 可以同步到 discuz

Phpcms退出 可以同步到discuz

Discuz登陆 无法同步到phpcms

Discuz退出 无法同步到phpcms

 

解决方法:

修改 Discuz!

1、修改 template\default\member\login.htm 第 36 行,删除

onsubmit=”{if $this->setting[‘pwdsafety’]}pwmd5(‘password3_$loginhash’);{/if}pwdclear = 1;ajaxpost(‘loginform_$loginhash’, ‘returnmessage_$loginhash’, ‘returnmessage_$loginhash’, ‘onerror’);return false;”

 

2、修改 template\default\member\login_simple.htm 第 3 行,删除

onsubmit=”{if $_G[‘setting’][‘pwdsafety’]}pwmd5(‘ls_password’);{/if}return lsSubmit();”

 

注意:记得把最后面的那个  ”  也要去掉,本人之前就是因为没有去掉 ”  号而是直接删除到 ;就结束了,从而而导致第一第二步discuz的操作无效。

 

3、修改 /source/function/function_message.php 第 78 行,查找

$param[‘header’] = true;

替换为:

$param[‘header’] = false;

 

找到dz文件夹下的uc_client\data\cache\apps.php。找到该文件,看看是否只有一个数组,只有一个的话我们就把phpcms的数组给添加进去

<?php

$_CACHE[‘apps’] = array (

1 => //这是第一个数组,discuz的数组

‘appid’ => ‘1’,

‘type’ => ‘DISCUZX’,

‘name’ => ‘Discuz!’,

‘url’ => ‘http://b.com’,  //这里填写你的论坛地址

‘ip’ => ”,

。。。。。。此处省略

‘allowips’ => ”,

),

2 =>      //这是第二个数组,phpcms的数组

array (

‘appid’ => ‘2’,

‘type’ => ‘OTHER’,

‘name’ => ‘PHPSSO’,

‘url’ => ‘http://你的域名/phpsso_server’,   //这里是关键

‘ip’ => ”,

‘viewprourl’ => ”,

‘apifilename’ => ‘uc.php’,

‘charset’ => ”,

‘dbcharset’ => ”,

‘synlogin’ => ‘1’,

‘recvnote’ => ‘1’,

‘extra’ => false,

‘tagtemplates’ => ‘<?xml version=”1.0″ encoding=”ISO-8859-1″?>

<root>

<item id=”template”><![CDATA[]]></item>

</root>’,

‘allowips’ => ”,

),

);

?>

修改完后保存,如果还是无效的话,就把discuz里面的整个uc_client 复制到phpsso_server/api/ 下,覆盖原来的 uc_client 。

最后:有网友反映说在phpcms注册的会员,在第一次登陆discuz的时候要激活一次,这个问题可以在discuz的后台里面解决: discuz后台—-> 站长—–>UCenter设置,拉到最后面有一个 “是否允许其他应用的会员在站点激活” 和一个是否允许直接激活,两个全部选“是” 然后提交

修改完这些后测试,discuz同步登陆到phpcms,本地无效,但是在线上服务器上却有效 ,这一点无需担心,那可能使缓存所导致的原因,因为本人在测试的时候多次刷新无果,后来切换本地服务器环境的时候发现竟然登陆上来,此后每次 双向登陆退出口成功完成。

本文为了让新手更好的了解问题,所以写的比较啰嗦^_^,如发现不到之处,请多包涵

文章仅供学习交流,转载请注明源文链接,

时隔两年再来编辑这部片文章,觉得还是不要用这些N年不更新的系统了,想进步的话就自己手写,自己开发,哪怕写的再渣渣,那也是经过了思考也是一种积累。