ucenter 整合同步登錄 2019

1.介紹

ucenter的同步登陸,可以整個多個應用的會員系統,實現同步登陸 同步註銷等等

版本: UCenter_1.6.0_SC_UTF8  (下載的時候認準 discuz.net)

PHP版本: 5.6 

 

2.接入過程

1  首先解壓ucenter軟件包,然後可以看到裏面有幾個文件夾 分別是 advanced  readme  upload  utilities

 

2. 然後upload這個文件夾就是Ucenter的服務器端 ,建好數據庫,安裝好就行,我這邊改名爲ucserver

 

3.現在我們來實驗一下

 

4 還是剛剛的文件夾 裏面有一個demo ,在advanced裏的examples

 

5 我們把它複製到 服務器的根目錄 命名爲examples1  ,用http://localhost/examples 訪問 。目錄結果如下 (ucclient就是examples1,網上來的圖,哈哈)

config.inc.php文件和uc_client文件夾(這個在上一級目錄),放到自己站點的一個目錄下

 

uc_client文件夾,是一個很重要的類庫,當然其實他不只是類庫,但是他最重要的作用就是給我們提供相應的同步方法,這些同步方法,都是用來通知ucenter server的(也可以認爲就是調用ucenter的方法)。

config.inc.php這個配置文件,配置了我們需要的參數的,比如ucenter server的url等等,都是寫很重要的參數,在uc.php和uc_client中都會用到。

include沒有什麼用,這裏只是爲了讓他不報錯,加入的。你可以改造uc.php後,將include目錄去除。

 

6 現在我們登陸到ucenter的後臺  添加應用

 

添加

 

如果是自己做的網站請選其他 ,應用ip一般爲空,通訊密鑰說一下,它和你的網站根目錄的 config.inc.php的這段對應

 

define('UC_KEY', '1234567890');             // 與 UCenter 的通信密鑰, 要與 UCenter 保持一致

還有 UC_APPID 也要做好對應,添加後會有一個ID號

define('UC_APPID', 2);

添加提交後,如果提示通訊成功說明成功了。

如果通訊失敗,看看網站目錄結構是否不正確,然後把ip也加上去

還有uc的連接參數也要正確填寫 

 

define('UC_DBHOST', 'localhost');           // UCenter 數據庫主機
define('UC_DBUSER', 'root');                // UCenter 數據庫用戶名
define('UC_DBPW', '');                  // UCenter 數據庫密碼
define('UC_DBNAME', 'uc');              // UCenter 數據庫名稱
define('UC_DBCHARSET', 'utf8');             // UCenter 數據庫字符集
define('UC_DBTABLEPRE', 'uc.uc_');          // UCenter 數據庫表前綴

 

3. 實驗一下

3.1 弄好後,我們在 http://localhost/examples/ucexample_1.php註冊一個xiaoming ,然後到ucenter後臺的用戶管理看看是否註冊成功

 

3.2 我們把上面的examples1 再複製一份出來,命名爲examples2 吧。注意配置好應用,並通訊成功。這樣就能模擬多一個站點出來

 

3.3 好了,做好上面的準備工作後。我們用xiaoming登陸一下 (http://localhost/examples2/ucexample_1.php?example=login)

 

3.4 我們再回去看看 http://localhost/examples1是否也同步登陸了。

如果不行,有可能是cookie衝突了。 把 examples2下的uc.php裏的synlogin方法裏 的cookie的名字改一下

 

我這裏改爲Example_auth2了 ,因爲examples1的是Example_auth

 

3.5 上面的只是單純cookie登陸,沒有連接數據庫,需要的可以看看demo裏的code文件夾的 login_db.php  

 

3.6 同樣的,同步註冊點擊demo裏的註冊就好了

 

 

4.代碼分析

爲什麼可以同步呢

我們來看看demo裏登陸過程

list($uid, $username, $password, $email) = uc_user_login($_POST['username'], $_POST['password']);
setcookie('Example_auth', '', -86400);
if(!$db->result_first("SELECT count(*) FROM {$tablepre}members WHERE uid='$uid'")) {
    //判斷用戶是否存在於用戶表,不存在則跳轉到激活頁面
    $auth = rawurlencode(uc_authcode("$username\t".time(), 'ENCODE'));
    echo '您需要需要激活該帳號,才能進入本應用程序<br><a href="'.$_SERVER['PHP_SELF'].'?example=register&action=activation&auth='.$auth.'">繼續</a>';
    exit;
}
//用戶登陸成功,設置 Cookie,加密直接用 uc_authcode 函數,用戶使用自己的函數
setcookie('Example_auth', uc_authcode($uid."\t".$username, 'ENCODE'));
//生成同步登錄的代碼
$ucsynlogin = uc_user_synlogin($uid);
echo '登錄成功'.$ucsynlogin.'<br><a href="'.$_SERVER['PHP_SELF'].'">繼續</a>';
exit;

1.  首先 1 -8 行就是判斷賬號的正確性了

2.  然後生成cookie

3.  重點來了最後調用這個方法  uc_user_synlogin 同步其他應用,意思是我這邊已經登錄了,你也設置cookie登陸吧

4. 調用這個方法後 ucenter就會 通知到其他應用,如 examples2應用下的 api下的uc.php下的  synlogin 方法

5 .那我們再來看看 這個 synlogin 方法

function synlogin($get, $post) {
    $uid = $get['uid'];
    $username = $get['username'];
    if(!API_SYNLOGIN) {
        return API_RETURN_FORBIDDEN;
    }
    header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
    _setcookie('Example_auth2', _authcode($uid."\t".$username, 'ENCODE'));
}

可以看出這個方法接受到uid和username這些參數後,生成了cookie

就獲得了 登陸狀態。

當然了不同的cms和網站,cookie的名字和生成cookie的值的方式是不一樣的

這個需要根據具體需求二次開發

6. 除了同步登陸  還有同步註冊,同步登出等等,具體看demo了

 

5. 關於cookie的跨域設置問題

由於ucenter的同步登陸主要是用cookie來實現,這裏就涉及到一個跨域問題。

所以在二次開發的時候注意不要刪掉這個,這個是拿來解決跨域問題的。

 

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

 

 

6.參考鏈接

原理:

https://www.iteye.com/blog/xuebingnanmm-627840

 

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