论坛登录整合方案

目前论坛同步登录方案实行两种整合方案。分别是整合ucenter和phpwind,整合过ucenter的站点均可以使用ucenter的整合方式。

为什么要整合论坛用户中心

航加垂直平台产品依赖于discuz的Ucenter或phpwind的用户中心。接入航加产品优先使用客户自己论坛的Ucenter,有很多好处:

  1. 后期若客户接入我们合作伙伴千帆云的App产品后,能够基于客户的Ucenter用户数据让航加产品与App的用户手机号、微信号等绑定信息互通。避免后期无法互通问题,后期互通需要耗费额外时间和费用。
  2. 客户论坛用户可以直接使用论坛帐号登录航加平台,已有论坛帐号的用户无需在航加平台上新注册,直接可以使用帐号和密码即可登录。
  3. 客户的旧垂直平台若也使用论坛帐号进行登录,则到新平台上无需进行大量的用户数据转换或只需要做少量的用户数据转换。

discuz\ucenter整合登录

使用ucenter整合只需要两大块操作

在ucenter中

  1. 选择左侧菜单栏【应用管理】进入应用管理列表。

  2. 在应用列表中点击添加新应用来增加一个应用。

  3. 在添加新应用页面中,选择安装方式选择“自定义安装”,应用类型选择“其他”,应用名称起一个容易识别的名称(比如“航加美食”、“航加房产”等),应用的主URL填写应用的URL地址(如"http://house.hangjiayun.com"等),应用接口文件名称填写"ucapi",是否开启同步登录是否接受通知两个选项勾选上。(前面未提到的栏目就空着不用填写)

ucenter配置 如图,红色标记处需要按照上面要求填写与勾选

在应用后台配置中

  1. 论坛类型选择ucenter

  2. 将上面第3步添加的应用信息填写好提交后,会获得随机生成的通信密钥(如上图的绿色标记处),将该密钥值复制下来,到应用后台站点配置的相应密钥处粘贴。

  3. 配置服务端地址,可在刚才添加的应用信息中找到类似这段代码define('UC_API', 'http://yourbbs.com/uc_server');,代码中后面带http字符的就是服务端地址,将其复制到配置填写框。

  4. 应用id处填写ucenter应用列表中该应用对应的id数字。

Ucenter服务端地址 应用后台配置

常见问题

按步骤顺序进行排查,若步骤无法解决,则继续下一步步骤进行尝试。

  1. 操作Ucenter后台-更新缓存-更新数据缓存,提交后再试;
  2. 检查Ucenter根目录(一般是论坛根目录/uc_server)下data/cache/apps.php文件是否具有写入权限;如果没有,给个写入权限后再重复第1步更新缓存,再试;
  3. 查看论坛根目录/uc_server/data/cache/apps.php文件里的内容是否包含刚才添加的应用信息,如刚才添加了一个应用URM,那在该文件中应该可以找到URM应用和填写的url地址等信息。如果有对应的信息,请继续往下一步排查;如果没有,则返回前两步重新操作检查。
  1. 检查ucenter应用列表中的论坛应用,“是否开启同步登陆”选项需要开启。
  2. 检查论坛根目录/uc_client/data/cache/apps.php文件是否有写入权限,需要给写的权限。
  3. 查看论坛根目录/uc_client/data/cache/apps.php文件内容,是否包含在Ucenter中添加的应用信息,如果没有,则重新编辑Ucenter中的应用然后再保存。
    • 简单方式: 如果论坛根目录/uc_server/data/cache/apps.php文件中有内容,那么直接将这文件中的内容直接复制到论坛根目录/uc_client/data/cache/apps.php文件中。然后再尝试登录,如果还是不行,请看下面的复杂方式若后续对Ucenter应用列表中的应用进行修改编辑,还需要再次人工重复操作复制一遍,以使得两个文件内容同步。若要一劳永逸,请看下面复杂方式来彻底排查问题根源。
    • 复杂方式: 正常未进行过二次开发、未使用影响登录的插件的情况下是不会出现该问题的。若前两步操作后还是不行,需要进一步深入代码排查。查看论坛根目录/source/class/class_member.php第139行的$ucsynlogin变量的值是什么。自行做日志记录该变量值,然后去论坛进行登录,然后查看该记录的该变量的值。值中应该会包含有ucenter应用列表中的应用信息。排查人员应当具有基本的PHP开发技能,从$ucsynlogin变量这一点逐步往前排查,找出问题根源。

phpwind登录整合(版本要求>=8.0,<9.0,适用GBK/UTF-8编码)

使用phpwind整合需要至少3大块操作

在phpwind后台中

  1. 创始人帐号登录phpwind后台,选择【创始人】-【用户中心】-【用户中心设置】,选择将本系统作为用户中心服务端,并点击下方随机生成密钥生成一串密钥。(若之前已经配置过这个页面,则跳过此步骤)

phpwind用户中心设置

  1. 进入【创始人】-【用户中心】-【应用管理】-【添加应用】,应用名称起一个容易识别的名称(比如“航加美食”、“航加房产”等),应用的URL填写应用的URL地址(如"http://house.hangjiayun.com"等),应用密钥点击旁边的按钮随机生成一个,接口文件填写"pwapi"。

phpwind用户中心设置

在应用后台配置中

  1. 论坛类型选择phpwind

  2. 将上面第2步随机生成的应用密钥复制下来,到应用后台站点配置的相应密钥处粘贴。

  3. 服务端地址配置填写论坛的地址,如"http://yourbbs.com/"。

  4. 应用id处填写ucenter应用列表中该应用对应的id数字。

论坛代码部分改造

由于phpwind本身的特性,需要对其源码进行部分改造,请根据下方表格中的版本要求修改,从上往下看,符合修改要求的请按照修改内容操作。所有修改内容的方案是最小化修改的方案,以确保论坛正常使用。

修改要求 修改内容 目的及作用
版本为8.7的需要改 打开论坛根目录下的template/wind/header_login.htm文件,找到onsubmit="return headerAjaxLogin.login(document.login_FORM);"这句并删除,找到<input type="hidden" name="ajax" value="1" />value中的1改为0。同时后台需要关闭【全局】-【安全优化】-【安全控制】-【安全问题功能】 为了能在论坛登录时触发内部的同步登录通知,phpwind在8.7这一块做的并不是很完整
修改过后台Cookie作用域的需要改 打开论坛根目录下的pw_api.php文件,找到define('P_W','admincp');,将admincp改为global 为了使论坛接收到其他应用同步登录通知时,能根据后台配置的Cookie作用域设置cookie,phpwind在这一块并没有做好判断
所有版本需要改 打开论坛根目录下的api/class_User.php文件,找到synlogin($user)函数,在该函数return '';语句之前任意处插入Cookie("ck_info",$GLOBALS['db_ckpath']."\t".$GLOBALS['db_ckdomain']); 由于论坛接收到其他应用的同步登录通知后,源码中没有设置"ck_info"的cookie,导致在论坛无法成功退出的bug

安装插件

点击下载 phpwind客户端插件 插件,将zip压缩包解压,将其中的hangjiaapi文件夹放置在论坛根目录下的hack文件夹中。

再到后台插件中心安装该插件即可,无需做其他配置