星期六 多云 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)
友吧今天
- 解决 discuz 同步注册到 uchome.
- 今天在远程升级了 uc 1.6,安装 discuz x2.5,有了这几天在本地的测试经验,今天安装很顺利。