热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何配置phpcmsv9整合DiscuzX3同步登陆和退出

很多站长利用Phpcmsv9搭建主站,然后用Discuz!X3搭建网站的论坛,这样一个网站就会有两个用户中心,分别是Phpcmsv9的phpsso和Discuz!X3的UCenter。这就需要将两款程序进行整合,从而达到同步注册、同步登录、同步退出的效果。本教程是以UCenter为服务

很多站长利用Phpcms v9搭建主站,然后用Discuz! X3搭建网站的论坛,这样一个网站就会有两个用户中心,分别是Phpcms v9 的phpsso和Discuz! X3的 UCenter。这就需要将两款程序进行整合,从而达到同步注册、同步登录、同步退出的效果。

  本教程是以UCenter 为服务端,phpsso 与 Discuz! X3分别作 UCenter 的客户端应用。phpsso 与 Discuz! X3通过 UCenter 发生交互;而Phpcms v9 通过 phpsso 与 Discuz! X3发生交互。整合步骤如下:

  第一步:完全安装Phpcms v9 和 Discuz! X3的最新版

  小编是将Phpcms v9安装在根目录,然后在根目录新建一个bbs目录安装Discuz! X3,本教程中的路径是以此安装目录为例的,站长们操作时应该以自己实际情况更改路径。另小编制作测试本教程时使用的是最新版的程序,所以不保证所有版本按照本教程都能整合成功,建议将程序升级到最新版。

  第二步:在 UCenter 中添加“phpsso 应用”

  登录Discuz! X3后台,进入“UCenter”,点击“应用管理”后点击“添加新应用”进入应用添加界面,设置如下:

  1、安装方式选择“自定义安装”

  2、应用类型选择“其他”

  3、应用名称填“phpsso”

  4、应用的主 URL, 即phpsso_server的路径,视实际情况而定,注意最后不要带斜杠。如本教程填写为http://127.0.0.1/phpsso_server

  5、通信密钥,任意填写64字节以内的英文字母及数字,不过要记住,因为phpcms 的通信密钥必须与此设置保持一致,否则 phpsso 将无法与 UCenter 正常通信。如本教程设置通信密钥为:chinaz

  6、应用IP、应用的物理路径、查看个人资料页面地址默认留空即可,而应用接口文件名称默认uc.php即可。

  7、标签单条显示模板、标签模板标记说明两项默认留空即可。

  8、是否开启同步登录:是。只有开启后,两款程序才能实现同步登录。

  9、完成后提交,将生成新的应用ID。(记住这个应用ID,在”第三步“中将用到它。)

  10、进入后台“站长”,“UCenter 设置”选项。”是否允许直接激活”一项,选择“是”。

  下面去Phpcms v9中配置phpsso。

  第三步:配置phpsso

  登录Phpcms v9后台,进入“phpsso”,点击“系统设置”,进入“UCenter配置”设置界面,设置如下:

注意:数据库前面的符号 `ucenter`.uc_ 请复制符号

  1、是否启用:是

  2、Ucenter api 地址,即uc_server的路径,根据你的安装情况而定,注意最后不要带斜杠。如本教程填写为:http://localhost/bbs/uc_server

  3、Ucenter 数据库信息:根据自己情况填写数据库的信息。其中数据库表前缀的格式为“`数据库名`.数据库前缀”,注意数据库名的不是单引号。

  4、应用id(APP ID),即第二步创建的 phpsso 应用时自动生成的应用ID。

  5、Ucenter 通信密钥,即第二步中设置的“通信密钥”,这两个值一定要确保一致,否则会导致无法通信。

  第四步:查看通信状态

  登录Discuz! X3后台,进入“UCenter”,点击“应用管理”查看第二步中创建的 phpsso 应用与 UCenter 通信是否成功。如果通信失败,请检查“第二步”与“第三步”中的各项参数配置是否正确。

  第五步:修改 Discuz! X3会员登录相关。

  若不修改此处则在Phpcms v9登录后可以同步登录到Discuz! X3,但是在Discuz! X3登录却无法同步登录到Phpcms v9。修改步骤如下:

  1、找到discuz目录下 template/default/member/login.htm,删除


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

  注意还有一个,不删除绝对不同步;(我测试过的)


 Onsubmit="ajaxpost('lostpwform_$loginhash', 'returnmessage3_$loginhash', 'returnmessage3_$loginhash', 'onerror');return false;"

  2、找到discuz目录下 templatedefaultmemberlogin_s imple.htm ,删除


Onsubmit="{if $_G['setting']['pwdsafety']}pwmd5('ls_password');{/if}return
  lsSubmit();"

  3、找到discuz目录下 /source/function/function_message.php ,查找


 $param['header'] = true;

  替换为


$param['header'] = false;

  第六步:整合完成

  小编整合到这就木有再做任何修改了,经测试完全实现了同步注册、同步登录、同步退出。只是因为程序的原因,在phpcms注册的账号是需要在Discuz登录一次之后才可以实现同步,这个是程序限制,没有办法解决的。另外发现不少站长整合后通信成功,但是出现注册和登录操作失败的问题,请注意第三步中数据库表前缀的格式。

  常见问题解答:

  1、整合完成后,在 phpcms 注册、登录均“失败”怎么办?

  答:这可能是由于无法连接到 UCenter 的原因。可以尝试修改文件

  phpsso_server/api/uc_client/model/base.php

  将第 74 行的 $this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, ”, UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);

  替换为: $this->db->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, UC_DBNAME, UC_DBCHARSET, UC_DBCONNECT, UC_DBTABLEPRE);

  2、为什么不使用官方自带的 UCenter 客户端?

  答:官方自带的 UCenter 客户端版本为 1.5.1 Release 20100501 ,而 Discuz! X3 使用的版本为 1.6.0 。版本不一致,无法整合成功。

  3、整合成功后,能达到怎样的效果?

  答:实现 phpcms 与 Discuz! 会员的双向同步注册、登录、退出等。

  4、第一次在 phpcms 注册的会员必须在 Discuz! 登录一次,下次才会同步登录。这正常吗?

  答:正常。因为 phpsso 作为 UCenter 的第三方应用,是需要在 Discuz! 登录激活的。

  如果您嫌在 Discuz! 激活麻烦,可以与我联系,我们将提供商业服务,帮您解决这个问题。

  5、会员在 phpcms 登录后,没有同步登录到 Discuz! 怎么办?

  答:这很可能是由于 phpsso 的“UCenter配置”有误引起的,请仔细检查各项参数设置。

  6、会员在 Discuz! 登录后,没有同步登录到 phpcms 怎么办?

  答:这很可能是由于 UCenter 的 phpsso 应用配置有误引起的,请仔细检查各项参数设置。

注意事项:
如Discuz配置过$_config['COOKIE']['COOKIEdomain'] = ”; 那phpcms相应的也必须同样的设置,要不同步登陆退出会失败


推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了如何使用jQuery和AJAX来实现动态更新两个div的方法。通过调用PHP文件并返回JSON字符串,可以将不同的文本分别插入到两个div中,从而实现页面的动态更新。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 查询单个functionquery(id){$.ajax({url:smallproductServlet,async:true,type:POST,data:{typ ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • ASP.NET&Spring.NET&NHibernate最佳实践(五)——第3章人事子系统(2)
    3.4.人事子系统服务层(Service)部门服务接口(IDeptService.cs)usingSystem;usingGuushuuse.SalaryPrj. ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
author-avatar
萍萍jean
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有