유창화님의 회원 연동 질문입니다. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

유창화님의 회원 연동 질문입니다. 정보

유창화님의 회원 연동 질문입니다.

본문

그대로 했는데, 동작을 하지 않아서 질문합니다.
아무래도 [일부 내용] 중에 아래 설정하는 부분을 설정을 못해서 동작에 문제가 있는 것 같아서요.
설정을 어떻게 해야하는지 잘 모르겠습니다.

$g4 환경변수에 $g4['member_server_password'], $g4['member_server_domain'] 설정한 상태에서만 사용가능
include_once($g4['path'] . "/config.php");  // 설정 파일, $g4['member_server_password'] 이 설정되어있어야 함

김유민님의 글도 적용을 했습니다. 현재 서버가 euc-kr이고 클라이언트쪽이 utf-8입니다.

[전체글 주소]
http://www.sir.co.kr/bbs/board.php?bo_table=g4_tiptech&wr_id=5725&sca=&sfl=wr_subject%7C%7Cwr_content&stx=%ED%9A%8C%EC%9B%90+%EA%B3%B5%EC%9C%A0&sop=and

[ 일부 내용 ]
클라이언트 측의 lib/common.lib.php내의 get_member 함수 수정

function get_member($mb_id, $fields='*')
{
    global $g4;

    //$g4 환경변수에 $g4['member_server_password'], $g4['member_server_domain'] 설정한 상태에서만 사용가능

    $return = Array();
    $getline = @file('http://' . $g4['member_server_domain'] . '/?member_server_password=' . $g4['member_server_password'] . '&mb_id=' . $mb_id . '&fields=' . $fields);

    $getline[0] = trim($getline[0]);
    if (!empty($getline[0])){

      $cutstring = explode('&', $getline[0]);
      foreach($cutstring as $temp){

        list($key, $value) = explode('=', $temp);
        $key = trim($key);
        if (empty($key)) continue;

        $return[$key] = $value;
      }
    }

    return $return;
}

서버측의 member_server/Yget_member.php 생성
<?php

header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');

$g4 = array();

$g4['path'] = "..";
include_once($g4['path'] . "/config.php");  // 설정 파일, $g4['member_server_password'] 이 설정되어있어야 함

//인증 패스워드 비교
if ($g4['member_server_password'] != $_GET['member_server_password']) exit;

//넘어온 값체크
$_GET['mb_id'] = trim($_GET['mb_id']);
$_GET['fields'] = trim($_GET['fields']);
if (empty($_GET['mb_id']) || empty($_GET['fields']) exit;

include_once("$g4[path]/dbconfig.php");
$connect_db = @mysql_connect($mysql_host, $mysql_user, $mysql_password) or exit;
$select_db = @mysql_select_db($mysql_db, $connect_db) or exit;

$sql = "select " . $_GET[fields] . " from " . $g4['member_table'] . " where mb_id = '" . $_GET['mb_id'] . "'";
$result = @mysql_query($sql) or exit;
$array = @mysql_fetch_assoc($result) or exit;

if (is_array($array)){

  $text = '';
  foreach($array as $key => $val){

    $text .= $key . '=' . $val . '&';
  }

  $text = preg_replace("`&$`", "", $text);
  echo $text;
}

exit;

?>


[김유민님의 글]
그런데 비밀번호 비교가 잘 안될때가 있습니다. 여러가지 문제가 있을 수 있지만,
mysql 4.0 과 4.1 은 비밀번호 암호화 방식이 다른점을 염두에 두어야 합니다.

// lib/common.lib.php 참고.
function sql_password($value)
{
    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
    $row = sql_fetch(" select password('$value') as pass ");
    return $row[pass];
}

그래서 bbs/login_check.php 에서 에러가 날 수 있습니다.
sql_password() 함수는 클라이언트의 암호화방식을 택할 테니까요.
이를 회원정보 받아오는 서버에 pass.php 라는 파일 만든후 그 서버의 비밀번호 암호화 방식대로 암호화한뒤 다시 받아오는 방법을 통해 해결했습니다. 유창화님 소스와 거의 동일 합니다.

<?php

//회원서버의 pass.php 를 생성합니다.

header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');

$g4 = array();
$g4['path'] = "..";
include_once($g4['path'] . "/config.php");

$pass = trim($_GET['pass']);
include_once("$g4[path]/dbconfig.php");
$connect_db = @mysql_connect($mysql_host, $mysql_user, $mysql_password) or exit;
$select_db = @mysql_select_db($mysql_db, $connect_db) or exit;

$result = mysql_query("select password('$pass') as pass");
$row = mysql_fetch_array($result);
echo $row[0];
exit;
?>

<?
// 클라이언트의 bbs/login_check.php 를 수정합니다.

$getline= @file('[서버의 pass.php URL]/?pass='.$mb_password);
$getline[0] = trim($getline[0]);

if (!$mb[mb_id] || ($getline[0] != $mb[mb_password]))
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.";

?>

그리고 인코딩 문제가 발생할 시에 유창화님의 소스중  get_memeber() 에..
$getline[0] = iconv('euc-kr', 'utf-8', $getline[0]);
이 구문을 추가함으로 해결 할 수 있습니다.

댓글 전체

전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT