Home  >  Article  >  Backend Development  >  Discuz & UCenter Modification Notes - 2014.12.19

Discuz & UCenter Modification Notes - 2014.12.19

WBOY
WBOYOriginal
2016-08-08 09:32:23973browse

Recently, I have been integrating JAVA and UCENTER. Due to the needs of the project architecture, I cannot completely focus on UCENTER, so I encountered many unpleasant things during the docking process. 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 the BBS blocks the registration, login, password search and other operations that come with DISCUZ, 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> }</span>

The above introduces the Discuz & UCenter modification notes - 2014.12.19, including the relevant content. I hope it will be helpful to friends who are interested in PHP tutorials.

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