其它服務器(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的官網掛了,也沒找着手冊,幸好有這位老哥的資料,不然鬼知道到底發生了什麼!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章