学习NO.1 发表于 2016-8-20 22:00:56

让hdwiki使用discuz的登录和注册(完成)

hdwiki是国内开源wki结构简单,安装使用还是很方便的。discuz是使用最多的开源BBS。

hdwiki虽然在官方说可以已经与discuz无缝对接,但是实际中使用会发现对接后会出现不少的问题,比如说:在hdwiki注册后很多的信息在discuz中是错误的;而且对接前的用户hdwiki也没有处理。最重要的是,hdwiki登录机制保存用户名和密码是有安全问题的,不如discuz设计得安全方便。所以对于老discuz的用户,大家还是非常想使用discuz的登录页面和登录验证机制。

最近我对2者研究了一下,进行一下相关改造,实现了hdwiki使用discuz的登录和注册机制。对程序的修改也是尽可能的少,同时尽可能的考虑了可扩展性。

主要有2方面工作要做:
1、用户同步,将老discuz的用户导入hdwiki;
2、discuz登录和注册的时候hack进hdwiki的登录和注册。

要求:
1、本例是以discuz用户为基准,如果以hdwiki为准的话,需要自己修改第一步骤。所以最好是已经安装discuz后再安装hdwiki。
2、对discuz数据库配置参数可以直接访问hdwiki数据库,也就是要求两都要在同一台服务器上,如果在不同服务器上也是可以实现,可是我不需要:)
3、discuz数据库名为discuz,hdwiki数据库名为hdwiki。对于读者请自行更改对应的数据库名。

具体实现:
-、将discuz用户导入hdwiki中
我使用的sql语句来进行的相关操作
1、先执行:insert into hdwiki.hdwiki_user(
user_id,user_email,user_nick,user_nick_upper,user_password
,user_city,user_sex,user_address,user_birthday
,user_qq,user_msn
,user_intro
,user_reg_time
)SELECT
m.uid,m.email,m.username,upper(m.username),m.password
,mf.site,m.gender,mf.location,m.bday
,mf.qq,mf.msn
,mf.sightml
,FROM_UNIXTIME(m.regdate)
FROM discuz.cdb_members m
LEFT JOIN discuz.cdb_memberfields mf ON m.uid=mf.uid
WHERE m.uid>2
2、再执行:update hdwiki.hdwiki_user
set
user_small_ico='uploads/userface/face.gif',user_big_ico='uploads/userface/face.gif',usergroup_id=2,state=1
where user_id>2; 以上就是将discuz的用户导入到hdwiki中。 二、修改程序文件1、添加一个模块文件,在注册与登录过程调用hdwiki的用户discuz/include/hdwiki_user.php下载链接 2、修改discuz/loggin.php找到代码: $discuz_user = $discuz_pw = '';
$styleid = $_DCACHE['settings']['styleid'];
在下面添加: include_once './include/hdwiki_user.php';
找到代码    $sessionexists = 0;
在下面添加:    //-- hdwiki login
    include_once './include/hdwiki_user.php'; 3、修改discuz/register.php找到: $groupid = $groupinfo['groupid'];
$styleid = $styleid ? $styleid : $_DCACHE['settings']['styleid'];
在下面添加: // hdwiki register
include_once './include/hdwiki_user.php';
4、修改hdwiki/sitetop.php找到: @$arr_user_info=reloadUser();
$tpl->assign($arr_user_info);在下面添加: $_DCACHE['settings']['authkey'] = 'CMUS6ipYZr0EJZ4';
$discuz_auth_key = md5($_DCACHE['settings']['authkey'].$_SERVER['HTTP_USER_AGENT']);
$formhash = substr(md5(substr(time(), 0, -7).$arr_user_info['user_nick'].$arr_user_info['user_id'].$arr_user_info['user_password'].$discuz_auth_key), 8, 8);
$tpl->assign("formhash",$formhash);
其中$_DCACHE['settings']['authkey']的值请查找你的discuz/forumdata/cache/cache_settings.php文件,找到 'authkey'对应的值,如果这个值添加写错误将不能正常退出。
5、修改hdwiki/templates/default/sitetop.html将代码:<a href="/club/logging.php?action=logout">退出</a>修改成:注意添加formhash<a href="/club/logging.php?action=logout&formhash=2ee9b36d&referer=/wiki/index.php">退出</a>将代码:
<a href="logging.php">我要登录</a> | <a href="register.php">注册</a>修改成:
<a href="/club/logging.php?action=login&referer=/wiki/index.php">我要登录</a> | <a href="/club/register.php?referer=/wiki/index.php">注册</a>
页: [1]
查看完整版本: 让hdwiki使用discuz的登录和注册(完成)