首頁  >  文章  >  後端開發  >  Discuz & UCenter 修改手記 - 2014.12.19

Discuz & UCenter 修改手記 - 2014.12.19

WBOY
WBOY原創
2016-08-08 09:32:23973瀏覽

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

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

專案並未要求使用者註冊時填寫email,但UCENTER API要求必須輸入email才可以通過驗證,不得已必須得修改UCENTER代碼才能繞過。以下是改動的程式碼:

/uc_server/control/user.php 69行:

<span>1</span> <span>//</span><span> NOTE: 解决email必须填写的问题
</span><span>2</span> <span>//if(($status = $this->_check_email($email)) < 0) {
</span><span>3</span> <span>//    return $status;
</span><span>4</span> <span>//}</span>

二、解決使用者必須手動登入1次論壇的問題

由於BBS封鎖了DISCUZ自帶的註冊、登入、尋找機密等操作,所以必須實現單一登入。當中遇到了一個非常蛋痛的問題:主站註冊的帳戶同步到UCENTER之後,UCENTER並不會通知其他應用,也就是說預設情況下,其他應用程式(包括DISCUZ在內)無法在新用戶註冊之後立即更新使用者清單。細細研究之後發現,DISCUZ是在本地註冊、登入等事件中才會與UCENTER同步。這導致了,在主站新註冊的用戶,無法在BBS單點登入成功-因為在BBS中根本不存在這個用戶。解決的方法有兩個,一是使用者手動登入一次BBS,BBS自帶的機制會自動將使用者資訊從UCENTER同步過來;二是修改DISCUZ系統代碼,在單一登入要求時自動同步使用者資料。在權衡了各方面因素之後,決定採用第二套方案。以下是改動的程式碼:

/api/uc.php 192行:

<span> 1</span> <span>//</span><span> NOTE 解决用户必须手工登录1次论坛的问题</span>
<span> 2</span> <span>$member</span> = getuserbyuid(<span>$uid</span>, 1<span>);
</span><span> 3</span> 
<span> 4</span> <span>if</span> (!<span>$member</span><span>) {
</span><span> 5</span>     <span>$init_arr</span> = <span>explode</span>(',', <span>$_G</span>['initcredits'<span>]);
</span><span> 6</span>     <span>$groupid</span> = <span>$_G</span>['regverify'] ? 8 : <span>$_G</span>['newusergroupid'<span>];
</span><span> 7</span> 
<span> 8</span>     C::t('common_member')->insert(<span>$uid</span>, <span>$get</span>['username'], <span>md5</span>(random(10)), <span>$get</span>['email'], <span>$_G</span>['clientip'], <span>$groupid</span>, <span>$init_arr</span><span>);
</span><span> 9</span> 
<span>10</span>     <span>$member</span> = getuserbyuid(<span>$uid</span>, 1<span>);
</span><span>11</span> <span>}
</span><span>12</span> 
<span>13</span> <span>if</span>(<span>$member</span><span>) {
</span><span>14</span>     dsetcookie('auth', authcode("<span>$member</span>[password]\t<span>$member</span>[uid]", 'ENCODE'), <span>$cookietime</span><span>);
</span><span>15</span> }</span>

以上就介紹了Discuz & UCenter 修改手記 - 2014.12.19,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn