Home  >  Article  >  Backend Development  >  Discuz & UCenter modification notes, discuz forum_PHP tutorial

Discuz & UCenter modification notes, discuz forum_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:11:26943browse

Discuz & UCenter modification notes, discuz forum

Recently, I have been reorganizing JAVA and UCENTER. Due to the needs of the project structure, I cannot completely focus on UCENTER, so during the docking process I encountered many unpleasant things. After much research, two of the big problems were finally solved, and they are now recorded for future reference.

1. Solve the problem that email must be filled in

The project does not require users to fill in their email when registering, but the UCENTER API requires that they enter their email to pass the verification. As a last resort, the UCENTER code must be modified to bypass it. The following is the changed code:

/uc_server/control/user.php line 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>

2. Solve the problem that users must log in to the forum manually once

Since BBS blocks DISCUZ’s own registration, login, password retrieval and other operations, single sign-on must be implemented. I encountered a very annoying problem: after the account registered on the main site is synchronized to UCENTER, UCENTER will not notify other applications, which means that by default, other applications (including DISCUZ) cannot immediately register a new user. Update user list. After careful study, I found that DISCUZ synchronizes with UCENTER only during local registration, login and other events. As a result, newly registered users on the main site cannot successfully log in to the BBS through single sign-in - because this user does not exist in the BBS at all. There are two solutions. One is that the user manually logs into the BBS once, and the BBS's own mechanism will automatically synchronize the user information from UCENTER; the other is to modify the DISCUZ system code to automatically synchronize user data when a single sign-on request is made. After weighing all factors, it was decided to adopt the second option. The following is the changed code:

/api/uc.php line 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> }

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/930048.htmlTechArticleDiscuz UCenter Modification Notes, the discuz forum has been reorganizing JAVA and UCENTER recently, but due to the project architecture needs, it cannot It is completely centered on UCENTER, so I encountered many during the docking process...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn