其它服务器(ThinkPHP5)与Discuz3.3自带的UCenter实现同步(二) - 同步注册与跳过登录激活,删除会员

本篇使用tp自带的index模块的index控制器来操作ucenter。
注意!本篇所有的修改文件或代码都均在tp项目下操作的,和dz已经无关了。

编辑控制器

<?php
namespace app\index\controller;
include_once ROOT_PATH.'config/config_ucenter.php';
include_once ROOT_PATH.'uc_client/client.php';

class Index
{
    public function register()
    {
        $result = 'tp的站点注册成功'; // 你本站点注册成功后再注册dz
        if ($result == 'tp的站点注册成功') {
            $uid = uc_user_register('username', '1', '[email protected]');
            var_dump($uid);
//            大于 0:返回用户id,表示用户注册成功
//            -1:用户名不合法
//            -2:包含不允许注册的词语
//            -3:用户名已经存在
//            -4:Email 格式有误
//            -5:Email 不允许注册
//            -6:该 Email 已经被注册
        }
    }
}

访问http://localhost/tp/public/index.php/index/index/register

在这里插入图片描述
表示我注册的这个会员,表id是2
打开pre_ucenter_members
在这里插入图片描述
现在,你可以去登录了。登录完让你激活,激活了就登录成功了。
在这里插入图片描述
在这里插入图片描述
这个激活是写入了另外一个真正的会员表pre_common_member,你不激活就只是ucenter注册的。

跳过登录激活tp根目录下修改配置文件
在这里插入图片描述

define('DISCUZ_DANAME', 'ultrax'); // dz数据库名
define('DISCUZ_DBRRE', 'pre_'); // dz数据包前缀

tp根目录下修改代码

在这里插入图片描述
找到add_user方法
覆盖

	function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {
		$regip = empty($regip) ? $this->base->onlineip : $regip;
		$salt = substr(uniqid(rand()), -6);
		$password = md5(md5($password).$salt);
		$sqladd = $uid ? "uid='".intval($uid)."'," : '';
		$sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
		$this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
		$uid = $this->db->insert_id();
		$this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");

        $discuz_dbname = DISCUZ_DANAME;
        $discuz_table_pre = DISCUZ_DBRRE;
        $table_info = $discuz_dbname.'.'.$discuz_table_pre;

        $this->db->query("INSERT INTO ".$table_info."common_member SET uid='$uid', username='$username', password='$password', email='$email', adminid='0', groupid='10', regdate='".$this->base->time."', credits='0', timeoffset='9999'");
        $this->db->query("INSERT INTO ".$table_info."common_member_status SET uid='$uid', regip='$regip', lastip='$regip', lastvisit='".$this->base->time."', lastactivity='".$this->base->time."', lastpost='0', lastsendmail='0'");
        $this->db->query("INSERT INTO ".$table_info."common_member_profile SET uid='$uid'");
        $this->db->query("INSERT INTO ".$table_info."common_member_field_forum SET uid='$uid'");
        $this->db->query("INSERT INTO ".$table_info."common_member_field_home SET uid='$uid'");
        $this->db->query("INSERT INTO ".$table_info."common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");

        return $uid;
	}

修改注册方法,把用户名改成username2,邮箱改成[email protected],再次运行。如果返回的不大于0,就看注释,是什么原因。

此时,你再去看那俩个会员表,都有username2了,再去登录username2,就直接登录了。
如果你想注册的时候不带邮箱,就去注释这几行代码
在这里插入图片描述
在这里插入图片描述
删除用户
新增方法

    public function delUser()
    {
        $uid = uc_get_user('username');
        var_dump($uid);
    }

访问http://localhost/tp/public/index.php/index/index/delUser
在这里插入图片描述
该方法是通过用户名查询用户信息,我们需要先获取到用户的id,才能调用下一个方法删除。下标0就是id。

    public function delUser()
    {
        $uid = uc_get_user('username4');
        var_dump($uid);
        $result = uc_user_delete($uid[0]);
        var_dump($result);
    }

返回值说明说返回1是成功,0是失败。但我返回的都是4,但确实删掉了,也登录不了了。
pre_ucenter_members会在执行后删除,但是pre_common_member会在你去登录的时候删除。

ucenter的官网挂了,也没找着手册,幸好有这位老哥的资料,不然鬼知道到底发生了什么!

发布了112 篇原创文章 · 获赞 75 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/weikaixxxxxx/article/details/91129908
今日推荐