程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Discuz & UCenter 修改手記,discuz論壇

Discuz & UCenter 修改手記,discuz論壇

編輯:關於PHP編程

Discuz & UCenter 修改手記,discuz論壇


最近在整JAVA和UCENTER的東西,受限於項目架構需要,無法完全以UCENTER為中心,所以在對接過程中遇到了許多不愉快的事情。經歷多番研究,終於解決了其中了兩個大問題,現記錄下來,以備日後查看。

一、解決email必須填寫的問題

項目並不要求用戶注冊時填寫email,但UCENTER API要求必須輸入email才可以通過驗證,不得已必須得修改UCENTER代碼才能繞過。以下是改動的代碼:

/uc_server/control/user.php 69行:

1 // NOTE: 解決email必須填寫的問題
2 //if(($status = $this->_check_email($email)) < 0) {
3 //    return $status;
4 //}

 

二、解決用戶必須手工登錄1次論壇的問題

由於BBS屏蔽了DISCUZ自帶的注冊、登錄、找密等操作,所以必須要實現單點登錄。當中遇到了一個非常蛋疼的問題:主站注冊的賬戶同步到UCENTER之後,UCENTER並不會通知其他應用,也就是說默認情況下,其他應用(包括DISCUZ在內)無法在新用戶注冊之後立即更新用戶列表。細細研究之後發現,DISCUZ是在本地注冊、登錄等事件中才會與UCENTER同步。這導致了,在主站新注冊的用戶,無法在BBS單點登錄成功——因為在BBS中根本不存在這個用戶。解決的方法有兩個,一是用戶手工登錄一次BBS,BBS自帶的機制會自動將用戶信息從UCENTER同步過來;二是修改DISCUZ系統代碼,在單點登錄請求時自動同步用戶數據。在權衡了各方面因素之後,決定采用第二套方案。以下是改動的代碼:

/api/uc.php 192行:

 1 // NOTE 解決用戶必須手工登錄1次論壇的問題
 2 $member = getuserbyuid($uid, 1);
 3 
 4 if (!$member) {
 5     $init_arr = explode(',', $_G['initcredits']);
 6     $groupid = $_G['regverify'] ? 8 : $_G['newusergroupid'];
 7 
 8     C::t('common_member')->insert($uid, $get['username'], md5(random(10)), $get['email'], $_G['clientip'], $groupid, $init_arr);
 9 
10     $member = getuserbyuid($uid, 1);
11 }
12 
13 if($member) {
14     dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);
15 }

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved