웹마스터 팁
XE 1.7 + 도쿠위키 Weatherwax RC1 세션 및 그룹 연동
2013.04.18 03:33
안녕하세요. 혼자 삽질을 하다가 겨우 완성해서 저 처럼 줄기차게 구글의 신탁을 찾고 계실 분들을 위해 정리 하나 올려 봅니다. 외부 프로그램 연동해 쓰시는 분들은 대부분 이미 잘 아실 내용입니다. 기본적으로 아래 문서들에 나온 내용을 step by step으로 따라할 수 있게 하나로 정리했습니다.
XE와 별도 프로그램 연동시 세션 공유 : http://www.xpressengine.com/tip/17536608
XE와 도쿠위키(dokuwiki) 세션으로 연동 : http://50ndd1n6.tistory.com/59
Authentication Plugins : https://www.dokuwiki.org/devel:auth_plugins
Working Example of trustExternal() : https://www.dokuwiki.org/devel:working_example_of_trustexternal
=======================
0. 당연하지만 모든 작업 하시기 전에 백업 잊지마시구요...
1. 제일 먼저 할 일은 도쿠위키 인증 백엔드 파일을 만드는 것입니다. 도쿠위키가 2013년 버전업을 하면서 인증방식이 플러그인식으로 바뀌었습니다. 그래서 위치가
(도쿠위키설치경로)/lib/plugins/auth(인증백엔드이름)/auth.php
가 되어야 합니다. 예를들면
doku/lib/plugins/authxe/auth.php
이런 식으로 말이죠. 그냥 디폴트 인증 플러그인인 authplain을 하나 복사해서 디렉토리명만 바꿔주시면 기본적인건 끝납니다. 다음으로 auth.php를 열어서
if(!defined('DOKU_INC')) die();
/**
* XE session sharing authentication backend
*/
class auth_plugin_authxe extends DokuWiki_Auth_Plugin {
/**
* Constructor
*
* Carry out sanity checks to ensure the Context object
* is able to operate. Set capabilities.
*
* @author Christopher Smith <chris@jalakai.co.uk>
*/
public function __construct() {
parent::__construct();
global $config_cascade;
$this->cando['external'] = true;
}
function trustExternal($user, $pass, $sticky = false) {
global $USERINFO;
global $conf;
if (!empty($_SESSION[DOKU_COOKIE]['auth']['info'])) {
$USERINFO['name'] = $_SESSION[DOKU_COOKIE]['auth']['info']['user'];
$USERINFO['mail'] = $_SESSION[DOKU_COOKIE]['auth']['info']['mail'];
$USERINFO['grps'] = $_SESSION[DOKU_COOKIE]['auth']['info']['grps'];
$_SERVER['REMOTE_USER'] = $_SESSION[DOKU_COOKIE]['auth']['user'];
return true;
}
$logged_info = Context::get('logged_info');
if ($logged_info) {
$sticky ? $sticky = true : $sticky = false;
$USERINFO['name'] = $logged_info->user_id;
$USERINFO['mail'] = $logged_info->email_address;
$is_admin = in_array('Admin', $logged_info->group_list);
$is_member = in_array('Member', $logged_info->group_list);
...
if ($is_admin) {
$USERINFO['grps'] = array('Admin');
} else {
if ($is_member) {
$USERINFO['grps'] = array('Member');
} else if (...) {
...
} else {
$USERINFO['grps'] = array('Wait-listed');
}
}
$_SERVER['REMOTE_USER'] = $logged_info->user_id;
$_SESSION[DOKU_COOKIE]['auth']['user'] = $logged_info->user_id;
$_SESSION[DOKU_COOKIE]['auth']['info'] = $USERINFO;
return true;
} else {
return false;
}
}
}
이런 식으로 씁니다. 가운데 ... 부분은 추가로 ACL에 원하시는 XE 그룹을 넣으시면 됩니다.
2. 다음으로 ACL 목록을 수정합니다. 이것은
(도쿠위키설치경로)/conf/acl.auth.php
여기에 있습니다. 일단 XE 그룹명과 동일하게 이름들만 추가해 주시고 (접근은 전역 (*), 권한은 1 (read only)로 통일) 나중에 도쿠위키의 ACL 관리자 화면에서 상세 권한 설정을 하시면 됩니다. 이를테면
* @ALL 1
* @Member 1
...
이런 식으로 씁니다. Admin (관리그룹)은 추가하실 필요 없습니다. 그룹명은 영문으로 하실 것을 권합니다.
3. 이제 도쿠위키 관리자 모드로 들어갑니다. 일단 ACL 관리자를 여셔서 방금 추가한 그룹들이 제대로 추가가 되었는지 확인합니다. 다음으로 플러그인 관리자를 여셔서 1번에서 추가한 XE용 인증 플러그인을 활성화하고 저장합니다. (아직 authplain을 비활성화하지 마세요!)
4. 이제 도쿠위키 설정 파일을 수정해야 합니다. 도쿠위키 전통의 설정파일인
(도쿠위키설치경로)/conf/local.php
를 여셔서 $conf['superuser']를 XE에서 사용하는 관리자 그룹명으로 변경합니다. (ex. @Admin) 다음으로 $conf['defaultgroup']을 원하시는 XE의 기본 사용자 그룹명으로 써줍니다. 이곳에 들어갈 그룹명은 XE에서 가입하여 로그인시 아무런 등업을 하지 않은 상태에서 부여되는 기본 그룹명을 지정하시는게 좋습니다.
5. 이제 세션을 읽어오기위해
(도쿠위키설치경로)/doku.php
를 수정합니다. 제일 위의 주석 바로 아래에
require_once('(XE설치경로)/config/config.inc.php');
$oContext = &Context::getInstance();
$oContext->init();
를, 맨 아래에는
를 추가합니다.
6. 이제 다시 도쿠위키 관리화면으로 돌아가서 설정 화면에서 기본 인증 모듈에 authxe를 선택하시고 저장하시면 됩니다. 만약 5번 항목 수정 이후 관리자 모드 접근이 안될 경우
(도쿠위키설치경로)/conf/local.php
를 여셔서 $conf['authtype']에 인증 플러그인명을 적어주시면 됩니다.
7. 정상 작동을 확인하시고 스킨을 적절히 수정하시면 끝입니다 ^^
=======================
p.s. 어서 XE 위키가 안정화 되었으면 좋겠네요. 가능하면 도쿠위키 문법도 지원해 주시고ㅎㅎ
p.s.2 멀티 업로드 관련 문제로 이 방법으로 하시면 파일 업로드가 안됩니다;;; 어느 고수 분이 해결책을 알려주시면 좋겠네요 ㅠㅠ
댓글 20
-
푸시아
2013.04.18 03:56
-
ToFinder
2013.04.18 18:02
도쿠위키 짱~! ^^
sql 관련되어진 연결이 아닌 것이라서 속도면에서 빠른 반면 ㅠㅠ;;
자료업로드 형식이라서 엄청 데이터가 쌓이면 용량에 문제가 많은것이
도쿠이지요 ㅠㅠ;
그래도 사용할려고 준비중인데 이런글을 올려주시니 정말 감사합니다.
-
윈컴이
2013.04.18 18:12
뻘짓하다가, 나중에 하려고 묵혀뒀는데.. 감사합니다 ㅠㅠ -
윈컴이
2013.04.20 12:54
한번 몇일동안 해보고, 드디어 되었습니다.
세션 연동이 안되서 이상하다고 생각했는데, authplain을 과감히 끄니 되더군요.
감사합니다 :D
-
샹하이
2013.04.19 09:40
일단 좋은 정보 감사합니다.
여기 내용대로 따라 했습니다.
그런데 저의 문제는 로그인은 정상적으로 되는데
관리화면으로 들어가려고 Admin을 클릭하면 아래 그림처럼 나옵니다.
그러면서 로그아웃이 되어 버립니다.
-
rkgsa
2013.04.19 17:36
세션은 되는데(= XE 로그인한 상태에서 도쿠위키 접속) Admin만 누르면 튕긴다는 말씀이신지요? 그 경우는 겪어보지 않아서 잘 모르겠습니다. 다만 제가 비슷한 경우는 겪었는데 doku.php를 제대로 수정하지 않고, authplain인 상태에서 authxe로 변경하게 되면 비슷하게 로그인은 되는데 Admin으로 들어가면 튕겨나갔습니다. 참고해서 설정 확인해 보시길 바랍니다. 가급적 직접 local.php 수정해가면서 체크하시는걸 권합니다.
-
샹하이
2013.04.19 18:22
예, 맞습니다. 다시 시도해 봐야겠네요.
그리고 1번에서 이 부위
$is_admin = in_array('Admin', $logged_info->group_list);
$is_member = in_array('Member', $logged_info->group_list);
...
if ($is_admin) {
$USERINFO['grps'] = array('Admin');
} else {
if ($is_member) {
$USERINFO['grps'] = array('Member');
} else if (...) {
...
} else {
$USERINFO['grps'] = array('Wait-listed');
}
}
그룹을 어떻게 넣는지가 궁금합니다.예를 들어서 3개의 그룹 Admin, Regular, Associate 이 있다면
이 부위는
$is_admin = in_array('Admin', $logged_info->group_list);
$is_regular = in_array('Regular', $logged_info->group_list);$is_associate= in_array('Associate', $logged_info->group_list); 이렇게 하고
아랫 부분의 소스는 어떻게 넣는지가 궁금합니다.
-
ay
2013.04.19 20:47
그런 경우 똑같이
$USERINFO['grps'] = array('Associate');
하시면 됩니다. 실제 권한 관리는 ACL에서 지정해 주니까 여기서는 정확한 그룹명을 XE에서 받아와 도쿠에게 넘겨주는 역할만 하는 것입니다.
-
노모모
2013.04.21 23:11
제 경우에는 지금 xe 1.7 버전을 사용하는건 아닌데
세션으로 연동하면 ACL 플러그인이 작용하는 부분들이 제대로 동작하지 않고(파일 업로드, 접근 권한 목록 관리등)
DB로 연동하는게 좀 덜 귀찮기도 해서 DB로 연동했습니다.
http://pac.club.pusan.ac.kr/pacwiki/wiki:pacwiki
여기서 zbxe는 버전에 따라 xe로 적당히 고쳐주면 되고
인증 백앤드 파일 이름도 xe.class.php로 고쳐주면 됩니다.
그 외에 역시 버전에 따라 xe의 db.config.php 파일을 참고해서
DB ID, PASSWORD등을 불러오는 부분들을 수정해주면 됩니다^^~
-
라떼군
2013.04.21 23:43
혹시 DB를 통한 연동이면 로그인/로그아웃이 XE와 도쿠위키 따로 해야하는 건가요
아니면 이것도 세션연동처럼 동시에 로그인/로그아웃이 되는건가요?
-
ay
2013.04.22 07:45
네 맞습니다. 저도 처음엔 db 연동으로 구현해 쓰고 있었는데 제가 운영하는 사이트 이용자들이 로그인을 별도로 하는걸 극도로 귀찮아하는 분들이라서 별 수 없이 세션으로 갔습니다 ㅠㅠ db 연동으로도 자동 로그인이 되는 법을 아시면 알려주시면 좋겠네요
-
V_L
2013.05.12 02:19
authmysql을 사용한다면, xe의 사용자 자료를 그대로 사용하는 것이지만, 두 체계가 한번에 로긴/로그아웃되는 '세션연동'은 아니게 됩니다. Acl 문제가있는데 이번엔 되는 것 같습니다. 확인해보고 다시 보고 하겠습니다. -
라떼군
2013.04.21 23:42
감사합니다. 잘 되네요.
근데 XE가 로그아웃 시 도쿠위키의 RSS/ATOM을 확인하기 위해 주소 끝에 feed.php를 붙여 확인해보면
authxe에 대해 에러가 납니다ㅠㅠ
혹시 이에 대해 확인해 주실 수 있나요ㅠㅠ
-
ay
2013.04.22 07:50
기본적으로 xe가 로그아웃하면 Context가 없어져 버리기 때문에 이를 체크하는 if 문을 trustExternal에 추가해 보세요. (없으면 걍 false 리턴)
-
라떼군
2013.04.22 12:28
혹시 어디 파일에 어떻게 넣어야 하는지 알려주실 수 있으신가요?ㅠㅠ 제가 좀 까막눈이라ㅠㅠ -
V_L
2013.05.12 01:53
라떼군님 안녕하세요..
Fatal error: Class 'Context' not found in /home/hpadmin/public_html/note/lib/plugins/authxe/auth.php on line 36
이건 xe가정의되지 않아 관련 객체가 없는데 먼저 실행되어서 생기는 문제입니다.
이런 것을 추가하면 됩니다.
if (class_exists(Context)) {
-
샹하이
2013.04.22 14:48
세션은 잘 되어 XE 로그인 하면 아래 그림 같이 연동이 됩니다.
그러나, dokuwiki에서는 로그인 로그아웃이 않됩니다.
이게 정상인지 궁금합니다.
참고로 저의 경우는 미디어파일업로드는 정상적으로 됩니다. (언어를 en으로 선택했을 경우)
ko(한글)로 선택하면 파일업로드가 되지 않음.
-
V_L
2013.05.12 02:00
지금 사용하시는 방법은 원래 로긴/로그아웃은 xe에서 하고 도쿠위키에서는 그 결과만 가져다가 확인하는 방식입니다. 도쿠위키에서 로긴/로그아웃이 안됩니다. 설정으로 꺼놓으세요.
아래는 제 사이트에서 로긴/로그아웃 버튼을 처리한 방식입니다.
<?PHP if (class_exists(Context)) {
$logged_info = Context::get("logged_info");
if($logged_info){
echo "<li ><a>".$logged_info->nick_name." (".$logged_info->user_id.")"."</a></li>
<li ><a s href=\"http://vaslor.net/bb/?act=dispMemberLogout\">로그아웃</a></li>";
} else {
echo "<li><a href=\"http://vaslor.net/bb/?act=dispMemberSignUpForm\">회원가입</a></li>
<li><a href=\"http://vaslor.net/bb/?act=dispMemberLoginForm\">로그인</a></li>";
} }?>
-
샹하이
2013.06.05 17:09
감사합니다.
적용해 보겠습니다^__^
-
ToFinder
2013.04.22 15:21
그냥 지나가다가 쓰는것이지만 저도 조만간 해볼 생각이고 이곳저곳에서 본 결과
(미디어위키등도)
위키 고유의 레이아웃 중에서 로그인 부분을 제거하는것이 좋을 듯 합니다.
또한 로그인은 XE에서 이루어지도록 하는것이 가장 좋을 듯 하지요.
XE의 외부 페이지 기능을 적극 활용하면 이러한 부분을 이용하기 쉽지 않을까 하는 생각만 해봅니다.
아직 해보진 않았지만. 외부 페이지의 기본 레이아웃은 XE의 레이아웃이 될터이니 로그인 로그아웃은 XE 자체로
이루어지는것이고.. 별다른 문제점이 없을 듯 하여 보이네요 ^^*
제목 | 글쓴이 | 날짜 |
---|---|---|
간혹 DB오류메시지 뜨고 접속 안되는 경우 [1] | 다크진 | 2013.06.19 |
중복 글등록을 방지하는 간단한 팁 | 다크진 | 2013.06.18 |
XE 게시판에 소셜댓글 라이브리 적용하기 [6] [1] | 미자503 | 2011.01.26 |
문서 작성시 기본 카테고리 선택 | Summer | 2013.06.17 |
가입폼 글자 수 입력 제한 수정 방법 입니다. (검색해도 어디에도 되는게 없어서 올립니다.) [7] | easeE | 2012.05.03 |
게시판에 specialist,officialis 같은 단어를 쓰면 작동이 안될 때 [2] | Summer | 2013.06.13 |
글쓰기 안되고 관리자만 글쓰기가 될때 해결법 [2] | 소푸 | 2013.06.12 |
apm7 -> ubuntu 아파치 서버이전후 http500 에러가 날때 [1] | sweetchip_ | 2012.12.26 |
XE 자료실에 쉬운설치되게 등록하기 [1] | 도라미 | 2013.06.09 |
게시판에 갤러리 자동 삽입 [1] | 강지우588 | 2013.06.04 |
특정 카테고리의 최근 이미지 출력 위젯 [3] | 앙띠2 | 2010.04.28 |
레이아웃 구상에 도움을 주는 사이트 [2] | WhoamI | 2013.06.06 |
-추가- 당신의 XE 기반 홈페이지를 훅가게 하는 방법 4가지 [26] | 老姜君 | 2009.10.08 |
XE 1.7 + 도쿠위키 Weatherwax RC1 세션 및 그룹 연동 [20] | ay | 2013.04.18 |
♥ 간단하게 사이트 현재 접속자 수 표기하는 방법 ♥ [5] | 다크진 | 2013.05.28 |
페이지.. onmouseover... [2] | skeofk | 2013.05.28 |
XE 사용하기 - 동영상 강좌 [36] | 선우(善友) | 2010.05.05 |
확장변수 폼 디자인 하기 [14] | Diver | 2009.06.21 |
XE를 처음 설치하면 기본적으로 필요한 자료들 - 초보자용 V2013-05-20 [11] | Treasurej | 2012.03.26 |
알림센터 사용환경 수집 무력화하기 [14] | CMD | 2013.05.10 |
오오~대단해요!