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