Home 게시판 커뮤니티 Q&A 워드 프레스 테마/플러그인 제작 관련 초보자 질문 입니다.

4개 답변, 5 voices Last updated by Avatar of 082net082net 9 years, 2 months 전
  • Avatar of 신민정신민정
    Participant
    @shinminjung
    #28694

    전에 질문 관련 사항 올린 글을 제가 읽어도 잘 모르겠더라구요 ^_^;;; 그래서 정리 해서 질문 사항을 올립니다.

    1. 외부 홈페이지에서 쿠키를 얻어 오는 플러그인 입니다. 소스 확인을 좀 받고 싶습니다.

    <?php

    /*

    Plugin Name: testPlugin1

    Plugin URI:  http:localhost/forthpress

    Description: entity handling

    Version:     1.0

    Author:      bockgu

    Author URI:  http://localhost/forthpress

    License:     A “Slug” license name e.g. GPL2

    */

    ///쿠키 받아 온다.

    $_COOKIE[“쿠키값”];

    $_HTTP_COOKIE_VARS[“쿠키값”];

    //해당 쿠키 값내용을 요청

    $auth_ID = “https://www.test.io/test/test.do?ckeck=&#8221;.$_COOKIE[“쿠키”];

    //세션 초기화 , 핸들값 리턴

    $auth_ch = curl_init();

    ///////////////////curl_option setting 해주는 부분

    //접속할 URL주소

    curl_setopt($auth_ch,CURLOPT_URL,$auth_ID);

    curl_setopt($auth_ch,CURLOPT_SSL_VERIFYPEER,TRUE);

    curl_setopt($auth_ch,CURLOPT_RETURNTRANSFER, TRUE);

    curl_setopt($auth_ch,CURLOPT_NOSIGNAL,1);

    curl_setopt($auth_ch,CURLOPT_HTTPHEADER,array(“Content-Type:text/xml;charset=UTF-8”));

    curl_setopt($auth_ch,CURLOPT_HTTPHEADER,array(‘Content-Type: application/json’));

    curl_setopt($auth_ch,CURLOPT_SSL_VERIFYPEER,TRUE);

    curl_setopt($auth_ch, CURLOPT_TRANSFERTEXT,TRUE);

    $real_ID1 = curl_exec($auth_ch);

    echo “==================”.$real_ID1;

    //쿠키 값을 받아온 유저 정보

    $real_ID = ‘{“forumid”:[‘. $real_ID1 .’ ]}’;

    //임시로 만들어준 유저 정보

    //$real_ID ='{“forumid:[‘{} ‘ ]” }’;

    $curl_errno = curl_errno($auth_ch);

    $curl_error = curl_error($auth_ch);

    curl_close($auth_ch);

    //json decoding

    $decoded = json_decode($real_ID,true);

    $userState = $decoded[‘forumid’][0][‘status’];

    if($decoded != NULL)

    {

    ////COOKIE만들기

    //setcookie(“userName”,$userName);

    if($userState == 1)

    {

    //정상 로그

    $userName  = “Hello”.$decoded[‘forumid’][0][‘name’];

    setcookie(“userName”,$userName);

    }else if($userState == 0)

    {

    //로그아웃 되거나 전달 받은cookie값과 현재의 cookie값이 일치 하지 않는 경우

    $userName = “No Login User”;

    setcookie(“userName”,$userName);

    }else if($userName == -1)

    {

    //오류

    $userName =”Login and Register”;

    setcookie(“userName”,$userName);

    }

    }else{

    $userName = “Login and register”;

    setcookie(“userName”,$userName);

    }

     

    ?>

    2. 이렇게 쿠키 값을 받아 온 다음에 QA engine 테마가 설치된 wordpress에서

    스크린샷 2015-08-31 오전 10.30.29

    위 그림의 오른쪽 상단의 login or register 부분에 해당 쿠키 값을 뿌려 줬습니다.

    스크린샷 2015-08-27 오후 1.08.51

    위의 그림처럼 글자만 바꾸게 해주었습니다. 그러나 원하는 결과는 연동 관련 된 것이였기 때문에

    Login Register관련 부분을 클릭하면 아래와 같은 sign in modal창이 뜨게 되고 로그인을 해야 하는데

    스크린샷 2015-08-31 오전 10.34.06

    아래의 그림 처럼 로그인은 되지 않고 로딩만 되고 있게 되었습니다.

    그러나 위의 플러그인을 삭제 후 wordpress를 실행하게 되면 로딩이 되지 않고 바로 로그인이나 해당 유저가 없다는 메세지가 뜨게 됩니다.

    이 문제를 가지고 1달을 QA테마를 분석하고 있지만 확실한 원인을 찾을 수가 없습니다.

    저의 플러그인에 어떤 문제가 생긴거며 제가 찾아 봐야 할 부분을 정확히 알려 주셨으면 좋겠습니다.

     

    Avatar of 랭커랭커
    Participant
    @ranker
    #28703

    쪽지로도 말씀드렸지만… 급하신거 같아 제 컴에서 간단하게 테스트해보고 답변을 드리려고 했는데, 상황이 여의치 않네요. (코드만 보고 해결할 능력이 안되서요)

    어젠가… 윈도우10 업데이트를 했더니 로컬서버(APM) 의 Apache 서버가 아래와 같은 오류를 뿜으면서 구동이 안되네요. (덕분에 좀전에 발견했음)

    [error] [client 127.0.0.1] File does not exist: D:/work_tomcat/jsp/webapps/wpad.dat

    => 혹시 이 문제 아시는 분 있나요? 검색을 해도 비슷한 사례를 못 찾겠네요. ㅠㅠ

    APM 이야 최신 버전으로 다시 깔면 되겠는데… 그동안 작업해 놓은것들을 옮기자니 여러모로 번거로와서 지금 당장 답변을 못드림을 양해해 주세요.

    하지만, 코프레스에 경험 많으신 고수분들이 많으니 조만간 만족할만한 답변을 얻으실 수 있을 거라고 생각합니다.

    Avatar of bong8nimbong8nim
    Participant
    @bong8nim
    #28705

    잘하지는 못하지만

    한달간 헤매고 있다는 말씀에 뭔가 짠하게 공감되는 부분이 있어 답변 답니다.

     

    이해한 내용

     

    1. 외부 홈페이지(www.test.io)의 쿠키를 사용하여 내 홈페이지에서 인증작업을 한다

     

    2. 서버쪽에서 한번 다른쪽에 요청을 날려서 무언가의 값을 받아 처리를 할것이다.

     

     

    아는 내용

    1.

    지금 스샷 보니 쿠키값을 제대로 못받아 오는거 같습니다. (쿠키공유가 불가능해서 안되는걸로 추측)

     

     

    내 홈페이지에서 만들어진 쿠키가 아닌 다른 사이트에서 만들어진 쿠키라면

    가장 간단한 방법으로는 서브도메인으로 쿠키 공유하셔야 할것으로 보입니다. (SSO)

     

    예 : 외부홈페이지 http://www.test.io 라고 하면

    내 홈페이지는

    wordpress.test.io 라던지

    shinminjeong.test.io  라던지 서브 도메인 다르게 줘서

    쿠기 공유가 가능케 하는 방법 입니다.

     

    2.

     

    curl 관련 함수를 쓰시는거 같은데

    워드프레스에서 제공하는 함수들도 있습니다.

     

    wordpress HTTP API 를 사용하여 워드프레스 에러처리도 가능합니다.

     

    주요 함수들 :

    wp_remote_get()

    wp_remote_post()

    wp_remote_head()

    wp_remote_request()

     

     

    사용예 :

    $data = array(‘name’ => ‘bong8nim’);

    $url = ‘https://www.test.io/test/test.do?ckeck=cookie_value&#8217;;

    $options = array(

    ‘method’ => ‘POST’,

    ‘headers’=> array(

    ‘Accept’ => ‘application/json’,

    ‘Content-Type’ => ‘application/json’

    ),

    ‘body’ => json_encode($data)

    );

     

    $response = wp_remote_post($url, $options);

     

    if ( is_wp_error( $response ) ) {

    // 통신 에러

    $error_message = $response->get_error_message();

    wp_die(‘error request fail’);

    } else {

    // 통신 성공

    $response_body = json_decode($response[‘body’]);

     

    }

     

     

     

     

    Avatar of Matthew ParkMatthew Park
    Moderator
    @hackya
    #28707

    켁… 한달이요?

    제가 몇년전 매우 흡사한 솔루션

    http://www.question2answer.org/wordpress.php

    을 동일한 방식으로 구축했던적이 있는데 (물론 제 실력이 아닌 오길호님 과 Anthony 라는 친구의 실력으로/도움으로) 다른점은,저는 워드프레스 테마가 아니라 아예 독립적인 솔루션과 워드프레스의 로그인 credential 공유했다는 점 입니다.

    질문자 분처럼 처음에 오길호님의 도움으로 쿠키공유를 통해 로그인을 구축했다, 나중에 vuln (취약점) 이 발견되어 Oauth 로 바꿔야 했습니다.

    지금 구축하시려는 방식들의 예제를 살펴보시고, ctrl+c,v 하시면 될듯합니다.

    일단 오길호님 예제

    http://kilho.net/archives/mypost/786

    오길호님의 경우 쿠키는 쿠키플러그인을 사용해서 해결했습니다. 지금 이부분이 해결이 안되시고 계신걸로 이해했습니다. https://wordpress.org/plugins/root-cookie/

    (업데이트가 오랫동안 되지 않았지만, 지금도 멀쩡히 잘 작동되는 플러그인 입니다.)

    위에 bong8nim 께서 SSO 예제를 주셨는데, 원하시는건 그게 아니고, 오길호님 예제처럼 서로 다른 도메인 쿠키값을 공유하시는 것 맞죠?

    보안상 상관이 없는 솔루션이라면 (그러니까 워드프레스 관리자 계정이 털려도 상관없으신거면) 오길호 님 예제를 참고하시면 되고, 보안상 secured 되어야 하는 솔루션이면 OAuth 로 가셔야 합니다. https://ko.wikipedia.org/wiki/OAuth

    Avatar of Matthew Park
    Attorney, front-end developer, digital media artist, WordPress enthusiast, & a father of 4 wonderful children.

    Lives in Colorado.

    Avatar of 082net082net
    Keymaster
    @082net
    #28739

    일단은, @hackya 님 의견대로 OAuth를 기반으로 한 SSO를 구축하시는것을 고려해 보시는게 좋을 것 같네요.

    음… 이전질문과 이 내용을 함께 보아야 문제를 어느정도 이해할 수 있을것 같네요.

    쿠키를 받아서 타 사이트와 통신하여 로그인상태를 체크하는 것 까지는 성공하셨지만, 모달팝업을 통한 로그인이 진행되지 않는다는 얘기이시죠?

    스샷을 통해 예상해 보건데 모달 팝업 후 AJAX 통신을 통해 로그인 과정을 처리하는 것으로 보이는데요, 우선은 브라우저의 콘솔(F12)을 이용하여 통신과정에서 오류는 없는지, 응답(response) 내용에 필요한 정보 이외에 다른 오류 텍스트 등이 포함되어 있지는 않는지 확인해 보시기 바랍니다. 응답을 JSON으로 받는데 내용에 PHP 오류/경고 등이 포함되면 이를 처리하지 못할 수 있습니다.

    우선적으로 wp-config.php 에서 WP_DEBUG 가 true 로 되어있다면 false 로 바꿔 보시구요.

    이 외에는 문제가 있는 URL을 알아야 확인이 가능할 것 같네요.

    Avatar of 082net
    Facebook 사용자 모임 그룹 도 함께 운영되고 있으며, 격 주로 미트업과 스터디를 진행하고 있으니 관심 있으신 분들의 많은 참여 바랍니다 🙂
5 글 보임 - 1에서 5 까지 (총 5 중에서)
  • 답변은 로그인 후 가능합니다.