>  기사  >  백엔드 개발  >  Discuz & UCenter 수정사항 - 2014.12.19

Discuz & UCenter 수정사항 - 2014.12.19

WBOY
WBOY원래의
2016-08-08 09:32:23973검색

최근에는 JAVA와 UCENTER를 통합하고 있는데, 프로젝트 아키텍처의 필요로 인해 UCENTER에 완전히 집중할 수 없어서 도킹 과정에서 불편한 점이 많았습니다. 많은 연구 끝에 마침내 두 가지 큰 문제가 해결되었으며 현재는 향후 참고를 위해 기록되었습니다.

1. 이메일을 반드시 작성해야 하는 문제 해결

이 프로젝트는 사용자가 등록할 때 이메일을 입력할 것을 요구하지 않지만, UCENTER API에서는 확인을 통과하기 위해 이메일을 입력해야 합니다. 이를 우회하려면 최후의 수단으로 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>

2. 사용자가 포럼에 한 번만 수동으로 로그인해야 하는 문제를 해결합니다

BBS는 DISCUZ의 자체 회원가입, 로그인, 비밀번호 조회 등의 작업을 차단하므로 Single Sign-On을 구현해야 합니다. 매우 짜증나는 문제에 직면했습니다. 메인 사이트에 등록된 계정이 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으로 문의하세요.