• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>
    多程序整合 UCenter,在新用戶首次注冊后是沒有同步登錄到其它程序的,也就是說用戶得在其它程序用密碼再登錄一次,以后才能同步登錄,還有就是用戶不是在 Discuz 程序注冊的話,在 Discuz 登錄時得手動激活,這些都導致用戶體驗很不好,不過解決方法很簡單~
    修改各個程序目錄下的 ./uc_client/model/user.php 文件,大概在 129 行處的 function add_user 函數里添加代碼
    如 Discuz X 的:
    $this->db->query("INSERT INTO `dbname`.pre_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 `dbname`.pre_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 `dbname`.pre_common_member_profile SET uid='$uid'");
    $this->db->query("INSERT INTO `dbname`.pre_common_member_field_forum SET uid='$uid'");
    $this->db->query("INSERT INTO `dbname`.pre_common_member_field_home SET uid='$uid'");
    $this->db->query("INSERT INTO `dbname`.pre_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");
    Discuz 的參數比較多,`dbname` 是數據庫名,.pre_ 是表前綴,按自己的情況修改,注意需要在 MySQL 設置相應的權限,假設 Discuz X 和 UCenter 是在不同的數據庫且不同數據庫用戶,Discuz X 數據庫和用戶是 discuz,UCenter 的數據庫和用戶是 ucenter,那么需要設置 ucenter 擁有數據庫 discuz 的 insert 權限。(如果是同一數據庫、同一用戶則忽略這些步驟)
    phpMyAdmin 的操作步驟大概為:權限 -> 編輯權限 -> 按數據庫指定權限 -> 選擇數據庫 -> 勾選 INSERT -> 執行。

    這些代碼的原理就是,在某應用注冊用戶時,同時添加其它應用的數據庫字段,因為 UCenter 在首次注冊時并沒有這一步驟所以才沒能同步登錄與激活。

    修改后完整的 function 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'");
    	// BEGIN
    	$this->db->query("INSERT INTO `dbname`.pre_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 `dbname`.pre_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 `dbname`.pre_common_member_profile SET uid='$uid'");
    	$this->db->query("INSERT INTO `dbname`.pre_common_member_field_forum SET uid='$uid'");
    	$this->db->query("INSERT INTO `dbname`.pre_common_member_field_home SET uid='$uid'");
    	$this->db->query("INSERT INTO `dbname`.pre_common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");
    	// END
    	return $uid;
    }
    其它的程序就比較簡單了,打開程序的數據庫的用戶表,對比一下就知道了,下面提供幾個參考:
    // ecmall
    $this->db->query("INSERT INTO `ecmall`.ecm_member SET user_id='$uid', user_name='$username', email='$email', password='$password', gender='0', reg_time='".$this->base->time."', last_login='".$this->base->time."', last_ip='$regip', logins='1', ugrade='0', outer_id='0'");
    
    // ecshop
    $this->db->query("INSERT INTO `ecshop`.ecs_users SET user_id='$uid', email='$email', user_name='$username', password='$password', reg_time='".$this->base->time."', last_login='".$this->base->time."', last_ip='$regip'");
    
    // thinksns
    $this->db->query("INSERT INTO ts_user SET  email='$email', password='$password', uname='$username', is_active='1', is_init='1'");
    $tsuid = $this->db->insert_id();//獲取最新插入的thinksns的ID號
    $this->db->query("INSERT INTO ts_ucenter_user_link SET uid='$tsuid', uc_uid='$uid', uc_username='$username',uc_email='$email'");
    $this->db->query("INSERT INTO ts_user_online SET uid='$tsuid', ctime='".$this->base->time."'");

    thinksns的index.php最開頭要加上session_start(); 不然用戶是不能同步登錄的,因為session是在thinksns里面uc通過api/uc_client/common.php文件下面的如下代碼同步的

    //同步登錄ThinkSNS
    function ts_synclogin($user){
        session_start();
        $uid = $user['uid'];
        // 注冊session
        $_SESSION['mid'] = intval($uid);    
        $_SESSION['SITE_KEY'] = ts_get_site_key();

    (需要說明的是部分程序的登錄機制不同使得此方法的首次注冊同步登錄無法實現)

     

    穩定

    產品高可用性高并發

    貼心

    項目群及時溝通

    專業

    產品經理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質開發
    • 返回頂部
    精品久久久久成人码免费动漫 | 日韩精品中文乱码在线观看| 久久久久国产精品免费免费搜索| 麻豆精品久久久久久久99蜜桃| 亚洲AV成人无码久久精品老人| 国产一区二区精品久久| 国产亚洲精品激情都市| 精品人妻一区二区三区毛片| 夜夜高潮夜夜爽国产伦精品| 亚洲日韩乱码久久久久久| 北岛玲在线精品视频| 国产精品R级最新在线观看| 日韩精品人妻系列无码av东京| 国产精品VIDEOSSEX久久发布| 一本久久精品一区二区| 亚洲国产综合精品中文第一| AAA级久久久精品无码片| 精品免费久久久久久久| 2020国产精品永久在线观看| 91精品啪在线观看国产18| 精品无码久久久久国产| 色欲国产麻豆一精品一AV一免费| 久久精品中文字幕第一页| 国产精品日本一区二区不卡视频| 国产精品无码无片在线观看| 国产综合色在线精品| 国产精品天干天干综合网| 久久这里只精品99re免费| 久久国产精品免费视频| 久久66久这里精品99| 久久亚洲国产精品| 久久99视频精品| 人妻少妇精品视频二区 | 国产揄拍国内精品对白| 国产在线精品二区韩国演艺界 | 狠狠热精品免费观看| 少妇亚洲免费精品| 亚洲国产精品激情在线观看| 国产精品哟女在线观看| 国产午夜精品一区二区| 中文无码精品一区二区三区|