ucenter discuz tp 同步登錄 同步退出 同步修改用戶信息~~


參考網站:

http://blog.163.com/zhaozunjie@126/blog/#m=0  ---這個163的博客,很多ucenter的文章~~~很多php的知識~~~~

http://www.thinkphp.cn/code/1843.html

http://blog.csdn.net/u011771214/article/details/41781643---------ucenter的安裝。里面tp中除了uc的放置位置,都是直接用的;URL只要找到api的上面,里面的uc.php文件名不好更改

http://m.shanmao.me/index.php?s=/Index/acticle/tid/1755-----tp中操作都參考這個,discuz的方向操作不好參考,都直接復制的~~~
https://www.liudon.org/737.html
http://blog.sina.com.cn/s/blog_81827fc70100xaid.html----參考手冊
http://blog.163.com/zhaozunjie@126/blog/static/1398240612010101855623646/----提到的幾點都落實了,ucenter新添加應用的 配置注意問題;

http://blog.csdn.net/lwx2615/article/details/6817071----tp通信老失敗,參考這文章才通信成功的,可以在本地新建一個小項目,

內容不多,調試成功了,可以逐步更改里面的配置,查看哪些和通信成功失敗有關的,小項目不用是tp的;test項目小,沒那么復雜,更改配置也比較容易;

ucenter手冊:
http://m.shanmao.me/index.php?s=/Index/acticle/tid/1755
uc開發接口手冊:
https://www.phpddt.com/manual/ucenter/html/user.htm##    ------ ucenter自己網站的手冊都不好下載看的,這里我見過最規范的uc文檔~~~

 

參考博客和手冊;

1.安裝ucenter ,再安裝discuz

  在ucenter里添加應用~~~~安裝配置就不寫了,上面博客都有;

  discuz安裝時,注意配置ucenter的url接口。

   discuz中應用,ucenter設置的時候,注意url,---我寫成127.。。。的格式的,用域名好像不行~~~(這里測試了很久)

  

  這樣用域名訪問discuz后台,上面欄目ucenter的點擊,左邊邊框還出不來,

  用ip方法discuz后台才可以;

  也可以直接訪問登錄ucenter,左邊就出來了,不過也左邊不用也行,下面配置都用不到~~~

1.配置,確保通信成功~~~

  1.discuz通信:

    尤其注意:應用的主 URL:

   鏈接到項目里的api前,會自動找uc.php

  注意:通信密鑰要和項目中config_ucenter.php中密鑰一致!!!!  

define('UC_KEY', 'a845N/eivvBpreT2sfhih7x5q19gvkj4VRNf5T4');//~~~要和項目中一樣;
  有時候項目更改了,該文件不會自動更改;----把原來添加的應用刪除再添加,就出現這樣的問題,UC_KEY不會自動更新;

 2.配置tp項目:使得tp的通信成功

在ucenter中添加應用:url寫到。。。。/uc  (不要斜桿),會自定找api和下面的uc.php.

uc.php從ucenter文件中賦值過來,有$get['action'] $get['time']  自己配置,如果沒抓取到的時候,設置為test  time(),

確保uc.php引用文件路徑都找到---uc.php如果執行有錯誤的話,通信會失敗;

client為ucenter復制過來的;

config.ini.php為ucenter添加應用時候,最下面生成的配置;----后續這里會添加tp項目的配置數據庫,和cookie配置----這個里面數據庫登錄用戶,密碼等配置錯誤,----通信會失敗(具體操作哪個數據庫寫錯倒不會通信失敗)

<?php
define('UC_CONNECT', 'mysql');
define('UC_DBHOST', 'localhost');
define('UC_DBUSER', 'root');
define('UC_DBPW', '123456');
define('UC_DBNAME', '******');
define('UC_DBCHARSET', 'utf8');
define('UC_DBTABLEPRE', '`******`.uc_');
define('UC_DBCONNECT', '0');
define('UC_KEY', 'r1QbKaB099Z41b04Q968A715v9P092Pem5Tccah13bwfk021g2l2r740c152CdU5');
define('UC_API', 'http://127.0.0.1/b******/****');
define('UC_CHARSET', 'utf-8');
define('UC_IP', '');
define('UC_APPID', '8');
define('UC_PPP', '20');

/*discuz表格 前綴 photos登錄discuz從ucenter用戶表中抓取插入用戶信息~~*/
define('DISCUZ_DANAME','*****');
define('DISCUZ_DBRRE','pre_');

//同步登錄 Cookie 設置
$cookiedomain = 'local.****.****.net';                     // cookie 作用域, 這里前面不能加http://,否則區域無效~~~,這個是uc.php接受鏈接來設置自己項目用的;這里填寫所在羡慕的域名~~
$cookiepath = '/';                                              // cookie 作用路徑

$dbhost = 'localhost';          // 數據庫服務器
$dbuser = 'root';               // 數據庫用戶名
$dbpw = '****';               // 數據庫密碼
$dbname = '****';             // 數據庫名
$pconnect = 0;                  // 數據庫持久連接 0=關閉, 1=打開
$tablepre = 'tf_';              // 表名前綴, 同一數據庫安裝多個論壇請修改此處
$dbcharset = 'utf8';            // MySQL 字符集, 可選 'gbk', 'big5', 'utf8', 'latin1', 留空為按照論壇字符集設定

include 中有一個mysql的類文件,ucenter中賦值過來的;

url寫到discuz,會自動去找api下的uc.php文件的;

config/config_ucenter.php文件中賦值,添加應用時,配置信息;

(client文件夾,可以從ucenter文件夾里復制過來``)

   

2.tp登錄,確保discuz也登錄~~同步登錄,同步修改用戶信息

 tp這注冊:確保ucenter也有數據查入,如果通信成功,配置好的話是這樣的:

                //ucenter注冊操作;~~~需要事務嗎
                $uc_uid = uc_user_register($username, $password);//~~這里email不填寫~~~后台屏蔽了驗證;
                if($uc_uid <= 0) {
                    if ($uc_uid == -1) {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,用戶名不合法');
                        $json->Send();
                    } elseif ($uc_uid == -2) {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,包含要允許注冊的詞語');
                        $json->Send();
                    } elseif ($uc_uid == -3) {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,用戶名已經存在於平台上');
                        $json->Send();
                    } elseif ($uc_uid == -4) {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,Email 格式有誤');
                        $json->Send();
                    } elseif ($uc_uid == -5) {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,Email 不允許注冊');
                        $json->Send();
                    } elseif ($uc_uid == -6) {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,Email 已經被注冊');
                        $json->Send();
                    } else {
                        $json->setErr('0','已注冊成功,用戶同步到平台出錯,未定義');
                        $json->Send();
                    }
                }

默認注冊只會玩uc數據庫中插入數據,但這樣,discuz中第一次登錄要激活,discuz用戶表中才會有數據,才可以登錄;---我們把配置改了,確保注冊,discuz表中的數據就上去~~
uc_client/module/user.php

參考博客:http://blog.csdn.net/iastro/article/details/52587643

    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'");

        //added begin~~~discuz 數據表格攔截激活,先插入數據;~~~注意:這里如果ucenter已經加入了數據,discuz不會放入數據;(調試開發中會有這樣漏洞)
        $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'");


        //added end
        return $uid;
    }

 

注意user_add 的這個寫法,ucenter里面如果已經有數據,就不管discuz中是否有數據,都不會再往里面放數據了~~調試的時候注意;
note:phpmyadmin,左側邊欄,展示數據表名是有限的,不一定會把所有的表格都展示出來,一開始,我看博客上有的表格是多余的,就沒有添加~~~~點擊dbname才會看到所有的表格,discuz的表格還是多的,都展開,瀏覽器不下拉都展示不了~~~~大概3 4頁才都出來!!
這里用到2個常量,都是在config中定義的,discuz的表格名稱和前綴~~~注意配置好了~~~
        //2.ucenter實現登錄~~~ //通過接口判斷登錄帳號的正確性,返回值為數組 list($uc_login_uid,$uc_login_username,$uc_login_password,$uc_login_email) = uc_user_login(trim($_POST['username']), trim($_POST['password'])); if ($uc_login_uid > 0){ //生成同步登錄的代碼 js代碼。后面輸出。 $ucsynlogin = uc_user_synlogin($uc_login_uid); $json->setAttr('ucsynlogin',$ucsynlogin); }elseif($uc_login_uid == '-1'){ $json->setErr('0','已登錄成功,用戶同步登錄到平台用戶不存在'); $json->Send(); }elseif($uc_login_uid == '-2'){ $json->setErr('0','已登錄成功,用戶同步登錄到平台密碼錯誤'); $json->Send(); }else{ $json->setErr('0','已登錄成功,用戶同步登錄平台錯誤未知'); $json->Send(); }
$ucsynlogin----輸出結果:

<script type="text/javascript" src="http://*******/discuz/api/uc.php?time=1503386589&code=c204c7bZe5hxoHmlwYe1yZKG8K7%2BbQ6VfvKT%2BPYYefGurOrZC9kQ1Oqqmibu%2BVcnnYcAK33phDTiTNYpxmegxjufcJqUiITmdm8nIMdPLJxpr8%2FEKABCg0PFmB9eW8f%2BKGL34e%2B8ptlG%2Bu%2BgJOOwupKl9b0%2BbNA1XJ0uxSfoyPhiZw" reload="1"></script>


<script type="text/javascript" src="http://local.photos.net/uc/api/uc.php?time=1503386589&code=66d11oXbvKbQptWZHTxzl8Y2lm64U1addkNVaiiMtUFMddxDfYq2Qax4NEenOBsRTxkstHkm86T5zTDyoMJwEEQw%2Fm6UsLTPvRgGpycynPowSA9ABBSnM5Ir7iaxJhUnW1K0styUM2gSLOimsPyy7ZqS000dvlx%2BpgxjY8b%2FqNpMjw" reload="1"></script>

確保里面鏈接,復制到瀏覽器可以正常實現~~~把這個script標簽append到html頁面,可以實現,遠程刷新,設置cookie~~~

 

修改用戶密碼,確保同步

修改用戶名,確保同步userrename沒有封裝好的方法可以直接用,我是自己構建方法,類似add_user,直接把uc discuz數據一起改了。

3.discuz登錄,確保tp也登錄~~~(discuz中的script代碼沒抓取出來,未實現,把discuz登錄都攔截到tp項目中登錄)

 config_global.php配置cookiedomain cookiepath 

 apps.php 配置。

 最后沒實現,而是把discuz注冊,登錄,攔截到tp項目中去的,這樣減少不少用戶信息沖突~~~

 

(ucenter安裝好discuz后,discuz 文件中的config配置,注意:同步discuz登錄,需要修改discuz的cookie配置,該文件超級管理才有編輯權限~~~)

需要多用戶登錄~~~配置好apps.php  ,這個是從ucenter文件中獲取的,從ucenter/data/cache/apps.php,同步登錄,這里必須最少數組內2個內容;

tp中是session登錄的,discuz中script的src傳遞的是cookie全局設置的方法,需要把cookie的值判斷再賦值給session,就可以了。注意:退出銷毀2個;

 

2.discuz登錄,tp如何可以和discuz也同步登錄;

   (見另外一個文章)

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM