차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
tech:authxe [2017/07/07 14:57] – 제거됨 1.215.74.36tech:authxe [2017/07/07 15:26] (현재) 121.134.164.159
줄 1: 줄 1:
 +{{tag>xe dokuwiki session authxe 도쿠위키}}
 +======Authxe: XE & Dokuwiki 동시 로그인======
 +
 +[[도쿠위키|도쿠위키]]의 강력한 유연성 (커스터마이징 능력) 을 십분 활용하여 **로긴/로그아웃**은 **[[XE]]**로 하고 도쿠위키에서는 그 정보만 가져다 쓰는 방법이다.
 +
 +<del>도쿠위키의 로긴/로그아웃 버튼은 떼버려야한다.</del> 설정의 Disabled action에 ** login,logout**을 입력한다.
 +
 +
 +
 +
 +===== inc/init.php 수정=====
 +<del>도쿠위키 루트에 있는 파일 **doku.php** 혹은</del> /inc/init.php를 수정한다.
 +
 +<WRAP center round important 60%>
 + doku.php를 수정하면 페이지를 표시하는 것 외의 다른 작업 (그림 올리기 등) 에서는 ACL이 안먹는다. 그러니 init.php를 수정해야 한다.</WRAP>
 +
 +
 +가장 최상단에 다음의 내용을 삽입한다. 도쿠위키 시작시에 XE도 같이 시작하는 것이다.
 +
 +<code php><?php
 +define("__ZBXE__",true);  // xe 여기있소!
 +define("__XE__",true); //XE 1.5.3 이후의 버전에서는 추가해야 한다.
 +require_once("/home2/vaslor/html/bb/config/config.inc.php");  
 +                               //XE설정파일의 적절한 경로를 넣다.
 +$oContext = &Context::getInstance();
 +$oContext->init();  //도쿠위키 시작시에 XE도 같이 시작하는 것이다.
 +?>
 +</code>
 +=====authxe plugin 추가=====
 +lib/plugins 폴더에 authxe 폴더를 추가하고 아래 파일을 넣다. 
 +
 +<file php auth.php><?php
 +// must be run within Dokuwiki
 +if(!defined('DOKU_INC')) die();
 +/**
 + * Authxe authentication backend
 + *
 + * @license  GPL 2 (http://www.gnu.org/licenses/gpl.html)
 + * @author  V_L <[email protected]>
 + */
 +class auth_plugin_authxe extends DokuWiki_Auth_Plugin {
 +  protected $users = null;
 +  protected $_pattern = array();
 +  public function __construct() {
 +   parent::__construct();
 +   $this->cando['external'] = true;
 +   global $config_cascade;
 +  }
 +  function trustExternal($user,$pass,$sticky=false){
 +   global $USERINFO;
 +   if (class_exists(Context)) {
 +    $logged_info = Context::get("logged_info");
 +    if($logged_info){   
 +      $sticky ? $sticky = true : $sticky = false;
 +      $USERINFO['name'] = $logged_info->nick_name;
 +      $USERINFO['pass'] = $logged_info->password;
 +      $USERINFO['mail'] = $logged_info->email_address;
 +      $USERINFO['grps'] = @array_values(@array_filter($logged_info->group_list));
 +      $_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;
 +      else return false;
 +    }
 +}</file>
 +
 +=====도쿠위키 설정=====
 +
 +
 +====템플릿 선택 및 어드민 설정====
 +^  위치  ^  내용  ^
 +|설정 -> 인증설정->authtype 인증 백-엔드 | "authxe"를 선택한다.|
 +|설정 -> 인증설정-> manager 관리자  |<del> "@관리그룹" 을 추가 한다.</del>
 +
 +이 것보다는 그냥 xe에서 그룹을 admin, user등으로 바꾸는 것이 더 낫다.
 +
 +
 +====도쿠위키 로그인/로그아웃 막음====
 +
 +이제 도쿠위키의 로긴/로그아웃은 작동하지 않는다.  의미가 없으므로 설정에서 그림과 같이 등록, 로긴,로그아웃을 제한한다. 이렇게 하면 메뉴에 해당항목이 나타나지 않다.
 +
 + <del>템플릿(스킨)을 적절히 수정하여 login/logout 버튼을 뗍니다.</del>
 +
 +{{tech/authxe.jpg}}
 +
 +
 +==== 로긴/로그아웃 링크 넣기====
 +
 +===사이드바에 넣기 (쉬움)===
 +
 +사이드바 (sidebar) 를 편집한다.
 +
 +  [[http://vaslor.net/bb/?act=dispMemberLogout|로그아웃]]
 +  [[http://vaslor.net/bb/?act=dispMemberLoginForm|로그인]]
 +
 +[[http://vaslor.net/bb/?act=dispMemberLogout|로그아웃]]
 +[[http://vaslor.net/bb/?act=dispMemberLoginForm|로그인]]
 +
 +로그인/로그아웃 상태가 반영되지 않는 단점(!)이 있다.
 +
 +===xe의 로긴/로그아웃으로 연결되는 링크를 템플릿을 수정하여 넣기===
 +
 +뷀넷에서 처리한 방식이다.
 +
 +<code php>    <ul  class="" style="text-align:right">
 +    <?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>";
 +    } }?>
 +    </ul></code>
 +
 +사용하는 템플릿 주로 dokuwiki 템플릿을 직접 수정하여 위의 코드를 삽입하는 것이다. 도쿠위키 설치된 곳에서 /lib/tpl/dokuwiki/main.php 를 수정하면된다. 
 +
 +44줄에 사이드 바 명령 밑에 넣으면 적당할 듯 보이다....
 +
 +<code php> 
 +                    <div class="content">
 +                        <?php tpl_flush() ?>
 +                        <?php tpl_includeFile('sidebarheader.html') ?>
 +                        <?php tpl_include_page($conf['sidebar'], 1, 1) ?>
 +                        <?php tpl_includeFile('sidebarfooter.html') ?>
 +                    </div>
 +
 +</code>
 +이것에 문구를 추가한다.
 +<code php> 
 +                    <div class="content">
 +                        <?php tpl_flush() ?>
 +                        <?php tpl_includeFile('sidebarheader.html') ?>
 +<ul  class="" style="text-align:right">                        
 +    <?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>";
 +    } }?>                  
 +</ul>                      
 +                        
 +                        <?php tpl_include_page($conf['sidebar'], 1, 1) ?>
 +                        <?php tpl_includeFile('sidebarfooter.html') ?>
 +                    </div>
 +
 +</code>
 +
 +''http://vaslor.net/bb'' 를 해당 사이트의 게시판주소로 바꿉니다.
 +
 +
 +
 +  * 참고: https://www.dokuwiki.org/devel:working_example_of_trustexternal
 +
 +
 +
 +^  누구나 수정하실 수 있다. [[http://vaslor.net/syntax|위키 사용법]] 참고하라. ^
 +