將 CodeIgniter 開發的子站點與既有論壇(如 Discuz!)透過 UCenter 實現用戶同步登入、註冊、登出等雙向通訊,是常見的整合需求。本文記錄核心整合步驟與程式碼封裝方式。
/api/uc.php(或自定義路徑),這是雙向通訊的關鍵——UCenter 透過此端點向子站推送同步指令(如同步登出、刪除用戶等)。將 UCenter 客戶端 SDK (uc_client) 複製至 CI 專案目錄(建議放於根目錄或 application/third_party)。若放於根目錄,UCenter 端配置的應用 URL 為 https://yourdomain.com/uc_client;若 api 目錄也在根目錄,則可省略 uc_client 路徑。
<?php
class Ucenter {
private $_uid;
private $_username;
public function __construct() {
require_once FCPATH . './api/uc_client/config.inc.php';
require_once FCPATH . './api/uc_client/client.php';
}
public function getUserId() {
return $this->_uid;
}
public function getUserName() {
return ucwords(strtolower($this->_username));
}
// 用戶登入驗證
public function login($username, $password) {
return uc_user_login($username, $password);
}
// 產生同步登入代碼(JS/iframe)
public function synlogin($uid) {
return uc_user_synlogin($uid);
}
// 同步登出
public function login_out() {
return uc_user_synlogout();
}
// 用戶註冊
public function regediter($username, $password, $email) {
return uc_user_register($username, $password, $email);
}
}
擴充提示:uc_client/client.php 內定義了完整的 UCenter API 函數(如 uc_user_edit、uc_user_delete、uc_get_user 等),可根據需求在 Library 中繼續封裝對應方法。
$username = $this->input->post('username');
$password = $this->input->post('password');
$this->load->library('ucenter');
list($uid, $username, $password, $email) = $this->ucenter->login($username, $password);
if (!empty($uid)) {
// 登入成功,產生同步登入代碼輸出至視圖
$ucsynlogin = $this->ucenter->synlogin($uid);
// 此處可將 $ucsynlogin 傳給視圖,在頁面執行 JS 完成多站點同步登入
}
config.inc.php 中的 UC_API 必須正確指向 UCenter 服務端地址;UC_KEY 加密驗證,雙端金鑰必須一致;api/uc.php 接收 UCenter 推送的同步通知(如同步登出、刪除用戶),SDK 已內建處理邏輯,僅需確保路由可達;透過 Library 封裝,將 UCenter 整合邏輯與業務控制器解耦,便於維護與擴展。