最近應公司的要求,要開發一個有點像QQ空間那樣的會員管理中心網站,發現UCenter的很多功能酷似QQ空間,於是選擇了UCenter作為程式的會員管理中心。前臺嘛就選擇我之前基於ThinkPHP3.1.2框架開發的WBlog好了。但是問題又來了:要求在WBlog前臺註冊的會員登入時要與UCenter同步,這就是我這次要解決的問題--ThinkPHP與UCenter的整合。我在網上搜尋了一下,ThinkPHP與UCenter的整合並不少,但是似乎越看越覺得頭暈,不是少這就是少那,到頭來差之毫釐,謬以千里,真夠折騰的。我仔細閱讀了UCenter的開發文件後,經過多次的除錯,終於完成了ThinkPHP與UCenter的整合。感覺這個結果是從苦水裡泡出來的一樣,呵呵。。。現在把整合的記錄分享給需要的童鞋。溫馨提示:在thinphp與UCenter整合中,您需要的基本條件是,有一定的PHP基礎,對ThinkPHP框架有所瞭解,會佈署目錄和配置資料。好了,我們開始吧!下載並安裝下面的程式WBlog3.1.2UCenter_Home_2.0_SC_UTF8UCenter 1.6.0安裝WBlog部落格程式已釋出的WBlog部落格程式還沒有會員中心,本次測試的會員中心是後面才寫的。如果你能等的話要待我整理好WBlog的會員中心程式才釋出,不能等的話也不會影響下面的程式整合,因為你可以找或者自己寫簡單的滿足以下兩個條件的thikphp程式:1、可以註冊會員2、可以登入和退出。這裡我就使用WBlog3.1.2了。在伺服器的根目錄新建目錄wblog1,把下載的WBlog3.1.2解壓得到的WBlog目錄裡的所有檔案複製到wblog1。在瀏覽器輸入http://127.0.0.1/wblog1/install/,安裝WBlog3.1.2。溫馨提示:在整合時最容易搞錯的就是路徑問題,在接下來的整合操作的根目錄都是指wblog1目錄,所以要和伺服器根目錄區別開來。安裝UCenter 1.6.0(簡體UTF-8)這個程式到官方去下載吧。在網站根目錄wblog1新建 ucenter 目錄,解壓UCenter 1.6.0,把解壓得到的upload目錄裡的所有檔案複製到剛才新建的ucenter目錄裡。在瀏覽器輸入http://127.0.0.1/wblog1/ucenter/install/,安裝UCenter 1.6.0。安裝UCenter_Home_2.0_SC_UTF8(簡體中文版)在網站根目錄wblog1新建 uh目錄並解壓UCenter_Home_2.0_SC_UTF8,把解壓得到的upload目錄裡的所有檔案複製到剛才新建的uh目錄裡。在瀏覽器輸入http://127.0.0.1/wblog1/uh/install/,安裝UCenter_Home_2.0_SC_UTF8。需要注意的是,安裝UCenter 1.6.0和UCenter_Home_2.0_SC_UTF8時順序不能顛倒,否則無法安裝。我們安裝完了WBlog3.1.2、UCenter_Home_2.0_SC_UTF8和UCenter 1.6.0三個程式後。接下來找到下載的UCenter 1.6.0,把 advanced 目錄裡面的uc_client 和 examples下面的api 資料夾複製到網站根目錄wblog1下,和ThinkPHP在同一目錄。找到專案W3note的配置資料夾wblog1/ Conf/,在其新建一個UCenter的配置檔案 config_ucenter.php ,然後在WBlog1\W3note\Lib\ORG目錄下新建一個UCenter的通訊處理類檔案UcService.class.php,我們先不要管檔案裡面寫什麼程式碼,後面將會講到。好了到這裡已經把後面要操作的目錄和檔案都佈局好了。為了理清目錄和檔案之間的層次關係,我把目錄和檔案製成目錄樹列出來:wblog1根目錄| – index.php//前臺入口檔案| – admin.php| – W3note//前臺專案| | – Lib| | | – ORG| | | | –UcService.class.php //UCenter的通訊處理類檔案| | – Conf//W3note專案的配置目錄| | | –config_ucenter.php //UCenter的配置檔案| || – Admin| – ThinkPHP //thinkphp3.1.2核心包和一些擴充套件| – install| – api| | – uc.php|| – uc_client| – ucenter| – uh這樣我們就可以一目瞭然了。現在開始api目錄裡面的uc.php 配置了,首先開啟這個檔案,找到36行的位置這一行程式碼
- require_once DISCUZ_ROOT.'./config.inc.php';
複製程式碼
- require_once DISCUZ_ROOT.'./include/db_mysql.class.php';
複製程式碼
- require_once DISCUZ_ROOT.'./uc_client/lib/db.class.php';
複製程式碼
- $GLOBALS['db'] = new dbstuff;
- $GLOBALS['db']->connect($dbhost, $dbuser, $dbpw, $dbname, $pconnect, true, $dbcharset);
- $GLOBALS['tablepre'] = $tablepre;
- 修改為
- $GLOBALS['db'] = new ucclient_db;
- $GLOBALS['db']->connect(UC_DBHOST, UC_DBUSER, UC_DBPW, UC_DBNAME, UC_DBCONNECT, true, UC_DBCHARSET);
- $GLOBALS['tablepre'] = UC_DBTABLEPRE;//關鍵
複製程式碼
- class UcService{
- public function __construct(){
- include_once(WBLOG_ROOT_PATH . 'W3note/Conf/config_ucenter.php');
- include_once(WBLOG_ROOT_PATH . 'uc_client/client.php');
- }
複製程式碼
- /**
- * 會員註冊
- */
- public function register($username, $password, $email){
- $uid = uc_user_register($username, $password, $email);//UCenter的註冊驗證函式
- if($uid <= 0) {
- if($uid == -1) {
- return '使用者名稱不合法';
- } elseif($uid == -2) {
- return '包含不允許註冊的詞語';
- } elseif($uid == -3) {
- return '使用者名稱已經存在';
- } elseif($uid == -4) {
- return 'Email 格式有誤';
- } elseif($uid == -5) {
- return 'Email 不允許註冊';
- } elseif($uid == -6) {
- return '該 Email 已經被註冊';
- } else {
- return '未定義';
- }
- } else {
- return intval($uid);//返回一個非負數
- }
- }
- }
複製程式碼
- /*
- 使用者名稱:$username,
- 密碼:$password,
- 郵箱:$email
- */
- public function addmember(){
- if($this->isPost()){
- $username = $_POST['username'];
- $email = $_POST['email'];
- $password = trim($_POST['password']);
- import("@.ORG.UcService");//匯入UcService.class.php類
- $ucService = new UcService;//例項化UcService類
- $uid = $ucService->register($username, $password, $email);//註冊到UCenter
- if($uid){//如果上面註冊成功將返回一個int型別的數字
- $M = D('Member');
- if ($vo = $M->create()) {
- if ($M->add()) {
- $this->success('註冊成功!');
- } else {
- $this->error('註冊失敗!');
- }
- } else {
- $this->error();
- }
- }else{
- exit($uid);
- }
- }else{
- $this->error('非法資料!');
- }
- }
複製程式碼
- public function uc_login($username, $password){
- list($uid, $username, $password, $email) = uc_user_login($username, $password);
- if($uid > 0) {
- return array(
- 'uid' => $uid,
- 'username' => $username,
- 'password' => $password,
- 'email' => $email
- );
- } elseif($uid == -1) {
- return '使用者不存在,或者被刪除';
- } elseif($uid == -2) {
- return '密碼錯誤';
- } elseif($uid == -3) {
- return '安全提問錯誤';
- } else {
- return '未定義';
- }
- }
複製程式碼
- public function uc_synlogin($uid){
- return uc_user_synlogin($uid);
- }
複製程式碼
- public function checkLogin() {
- if(!$_POST['username']) $this->error('帳號錯誤!');
- if(!$_POST['password']) $this->error('密碼錯誤!');
- if(empty($_POST['verify'])) $this->error('驗證碼必須!');
- import("@.ORG.UcService");//匯入UcService.class.php類
- $ucService = new UcService;
- $uidarray = $ucService->uc_login($_POST['username'], $_POST['password']);
- //dump($uidarray);
- $loginurl=$ucService->uc_synlogin($uidarray);
- echo $loginurl;//輸出同步登入程式碼,否則無法同步登入
- if(!is_string($uidarray)){
- //生成認證條件
- $map = array();
- // 支援使用繫結帳號登入
- $map['username'] = $_POST['username'];
- $map["status"] = array('gt',0);
- if($_SESSION['verify'] != md5($_POST['verify'])) {
- $this->error('驗證碼錯誤!');
- }
- $memberinfo=$this->Member->where($map)->find();
- if(false === $memberinfo) {
- $this->error('帳號不存在或已禁用!');
- }elseif($memberinfo['status']==0){
- $this->error('帳號已禁用!');
- }else {
- $password = pwdHash($_POST['password']);
- if($memberinfo['password'] != $password) {
- $this->error('密碼錯誤!');
- }
- session(C('USER_AUTH_KEY'), $memberinfo['id']);
- session('email', $memberinfo['email'] );
- session('loginUserName', $memberinfo['loginUserName']);
- session('lastLoginTime', $memberinfo['lastLoginTime']);
- session('loginnum', $memberinfo['loginnum']);
- session('lastloginip', $memberinfo['lastloginip']);
- //儲存登入資訊(相當於更新資訊)
- $data = array();
- $data['id'] = $memberinfo['id'];
- $data['lastlogintime'] = time();
- $data['loginnum'] = array('exp','loginnum+1');
- $data['lastloginip'] = get_client_ip();
- //$data['verify'] = $authInfo['verify'];
- $this->Member->save($data);
- $this->success('登入成功!',U('Member/index'));
- }
- }
- }
複製程式碼
- array(4) {
- ["uid"] => string(1) "1"
- ["username"] => string(5) "qqabc"
- ["password"] => string(6) "123456"
- ["email"] => string(9) "qq@qq.com"
- }
複製程式碼
評論(4)