第1663天:周末,discuz x2.5用户同步注册到uchome 2.0

星期六 多云 2~13℃

discuz x2.5 用户同步注册到 uchome 2.0

花了几天时间,终于解决这个头疼的问题了。

第1步

升级好 ucenter 1.6 后,记得把 uc 1.6 的 uc_client 覆盖 uchome 里面的 uc_client

第2步

参考 这篇日志 设置 discuz x2.5 与 uchome 2.0 的同步登录。

第3步

修改 \discuz\uc_client\model\user.php

找到

$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid=’$uid’");

在这行下面添加(修改代码中的 uchome 数据库名,如果表前缀也不一样的话,记得修改 uchome_ 表前缀):

$this->db->query("insert into UCH数据库名.uchome_member SET uid=’$uid’,username=’$username’,password=’$password’");
$this->db->query("insert into UCH数据库名.uchome_space SET uid=’$uid’,username=’$username’,ip=’".$this->base->onlineip."’, dateline=’".$this->base->time."’");
$this->db->query("insert into UCH数据库名.uchome_spacefield SET uid=’$uid’,email=’$email’,css=”,privacy=”,friend=”,feedfriend=”,sendmail=”");

第4步

修改 \discuz\source\class\class_member.php

在底下(大概 810 行的位置)找到:

$extra = array(
 ’showid’ => ‘succeedmessage’,
 ’extrajs’ => ‘<script type="text/javascript">’.
  ’setTimeout("window.location.href =\”.$href.’\';", ‘.$refreshtime.’);’.
  ’$(\’succeedmessage_href\’).href = \”.$href.’\';’.
  ’$(\’main_message\’).style.display = \’none\’;’.
  ’$(\’main_succeed\’).style.display = \’\';’.
  ’$(\’succeedlocation\’).innerHTML = \”.lang(‘message’, $locationmessage).’\';’.
 ’</script>’,
 ’striptags’ => false,
);

修改为:

$ucsynlogin = ”;
if($_G['setting']['allowsynlogin']) {
  loaducenter();
  $ucsynlogin = uc_user_synlogin($_G['uid']);
}
$extra = array(
 ’showid’ => ‘succeedmessage’,
 ’extrajs’ => ‘<script type="text/javascript">’.
  ’setTimeout("window.location.href =\”.$href.’\';", ‘.$refreshtime.’);’.
  ’$(\’succeedmessage_href\’).href = \”.$href.’\';’.
  ’$(\’main_message\’).style.display = \’none\’;’.
  ’$(\’main_succeed\’).style.display = \’\';’.
  ’$(\’succeedlocation\’).innerHTML = \”.lang(‘message’, $locationmessage).’\';’.
 ’</script>’.$ucsynlogin,
 ’striptags’ => false,
);

第5步

在 discuz 注册页注册,看看能不能注册成功,如果可以,那下面就不用看了。

如果注册时不能跳转页面(其实已经注册成功),有可能报错:

s is undefined

修改 static/js/common.js, 大约在第 640 行代码,在其中增加一行(见下面加粗的一行)

try {
 s = $(ajaxframeid).contentWindow.document.XMLDocument.text;
} catch(e) {
 try {
  s = $(ajaxframeid).contentWindow.document.documentElement.firstChild.wholeText;
  if(!s) s = $(ajaxframeid).contentWindow.document.firstChild.textContent; // 增加这行
 } catch(e) {
  try {
    s = $(ajaxframeid).contentWindow.document.documentElement.firstChild.nodeValue;
  } catch(e) {
    s = ‘内部错误,无法显示此内容’;
  }
 }
}

第6步

此时再进行注册,可能会报错:

UCenter info: MySQL Query ErrorSQL:INSERT INTO (此处略) Error:INSERT command denied to user (此处略) for table ‘uh_member’Errno:1142

发现是因为数据库用户的权限不足(我是每一个库建了一个数据库用户)。

如果使用 Navicat Lite,在“管理用户”里可以查看到权限。
在 ucenter 用户下面选择 uchome 库,勾选 Insert,保存。

第7步

我在进行以上操作后,终于同步成功了。

第8步

修改 /uchome/source/do_register.php

在最顶上增加

header("HTTP/1.1 301 Moved Permanently");
header("Location: /bbs/member.php?mod=register");
exit();

这样用户访问原来的 uchome 注册页面,会自动转到 discuz 的注册页。

参考资料:


在家健身(28)

  • 仰卧起坐 50 * 2

友吧今天

  • 解决 discuz 同步注册到 uchome.
  • 今天在远程升级了 uc 1.6,安装 discuz x2.5,有了这几天在本地的测试经验,今天安装很顺利。

 

RSS

上一篇:

下一篇:

发表评论

电子邮件地址不会被公开。 必填项已用*标注