本文主要内容
- 重新写discuz的注册接口
- 从原系统进入论坛自动注册并登录
咔咔之前没有使用过discuz,本文只是我自己的解决方案,要是有更好的实现方式可以一起交流交流
先看看系统本来的注册源码
- 点击注册后请求的是upload/member.php 这个文件
- 接着对请求的register进行验证
- 然后就会去加载
./source/module/member/member_'.$mod.'.php
- mod就是register
- 到了upload/source/class/class_member.php这个文件就可以看到注册,登录,退出等等接口
- 因为本案例需要实现的是不可在论坛系统上注册
- 也就是说原系统的用户进入论坛后自动注册,并且登录
- 为了保证数据不错乱把注册接口直接给干掉,然后重写一个登录接口接口
- 实现原系统进入论坛自动注册和登录
- 实现步骤
- 不管在文档还是查资料都可以知道用户注册用的是upload/uc_client/client.php 这个里边的uc_user_register这个方法
- uc_user_register这个方法会把用户信息存到pre_ucenter_members这个表里
- 然后还需要一次同步数据到pre_common_member这个表里
- 知道了以上写这个就很简单了
- 以下是实现代码,暂且还没有连接原系统的数据库,做了一个假数据来测试
function on_login () { $data = ['username' => 'kaka', 'u_oriPassword' => 123456]; $username = $data['username']; # 根据token查询用户信息 $members = DB::fetch_all("select * from pre_common_member where username = '$username' limit 1"); $member = empty($members[0]) ? '' : $members[0]; if($members){ setloginstatus($member,315360000); showmessage('login_succeed', 'forum.php',array('username' => $username)); }else{ $uid = uc_user_register($data['username'], $data['u_oriPassword'], $email = ''); if ($uid > 0) { # 然后根据用户信息在 pre_ucenter_members 表根据用户名进行查询 $uc_members = DB::fetch_all("select * from pre_ucenter_members where username = '$username' limit 1"); if($uc_members){ # 注册登录 同步用户 $uc_members = empty($uc_members[0]) ? '' : $uc_members[0]; if (!empty($uc_members)) { $com_mem_data = array('email' => $uc_members['email'], 'username' => $uc_members['username'], 'password' => $uc_members['password'], 'groupid' => $define_group_id, 'regdate' => $uc_members['regdate'], 'timeoffset' => 9999); DB::insert('common_member', $com_mem_data); setloginstatus($member,315360000); showmessage('login_succeed', 'forum.php',array('username' => $username)); } showmessage('网络错误','http://localhost/forum/upload/?mobile=2'); } } } }