네이버 로그인에 대해 문의드려요

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
네이버 로그인에 대해 문의드려요

QA

네이버 로그인에 대해 문의드려요

본문

네이버 로그인에는 문외한이라서 이제 막 배우고 있습니다.

아직 감이 안잡혀 다시 문의드립니다.

 

3698658811_1734963014.9041.jpg

3698658811_1734963026.8265.jpg

 

필요정보는 위의 사진과 같이 신청해서 승인신청했는데 추가설명자료 요청이 없는 거 보니 승인이 난 상태인것 같아 보여요.

 

---------

 

3698658811_1734963095.5016.jpg

 

회원가입을 클릭하면 위의 내용데로 회원가입이 되더라구요...

확인해 보면 아래그림과 같구요...

------

3698658811_1734963107.2873.jpg

 

------

[문의]

1. mb_name은 메일의 아이디로 갖고 오는거 같은데요. 이걸 실명으로 입력되게 하는 법은 없나요?

2. 네아로신청시 회원휴대전화 및 성별에 체크했는데요.. 왜 디비 저장시에는 mb_hp, mb_sex 필드에 저장이 안되네요... 이걸 신청한 정보데로 저장하려면 어떤 파일을 어떻게 수정해줘야 하나요?

 

질문이 좀 많습니다...ㅠㅠ

이제서야 네아로를 적용하려다보니 모르는게 넘 많네요...

고수님들 좀 알려주세요~~~~~~~~~~

이 질문에 댓글 쓰기 :

답변 2

1. 'mb_name'에 '메일 아이디'가 들어오는 문제 ;

반드시 실명이 필요한 서비스라면 “회원 이름”을 필수로 설정하시고,

사용자의 자율적 선택에 맡기거나 실명이 필수가 아닌 경우라면

추가(선택) 항목으로 설정하시면 됩니다. [가능하면, 사용자의 자율적 선택(추가)에 맡기시길]

 

- 콜백 URL(예: callback.php)에서 name 필드를 따로 받아와야 합니다.


// 네아로 액세스 토큰으로 프로필 가져오기
$me_response = getNaverProfile($accessToken); 
// 실제 필드는 response 안에 들어있음
// 예: $me_response->response->name, $me_response->response->email 등
$naver_user_name = $me_response->response->name;
// ...
// GnuBoard나 기존 DB 필드에 매핑
$mb_name = trim($naver_user_name);
// ...
위와 같이 mb_name에 직접 response.name을 매핑해야 메일 아이디가 아닌,

실제 이름이 들어가게 됩니다.

*한글 이름이 깨지거나 인코딩 문제가 생길 수 있으므로,

DB 테이블(mb_name 컬럼)이 UTF-8로 설정되어 있는지 확인하시기 바랍니다.

 

2. 휴대전화(mb_hp), 성별(mb_sex)이 저장되지 않는 문제 ;

네이버 API 설정 화면에서 “휴대전화번호”와 “성별”은

필수’가 아닌 ‘추가’ 항목으로 설정해야 합니다. https://policy.glitter.kr/qa_php/Naver_API_Approval_Request-1.png

즉 “추가 선택 항목”란에 체크되어 있어야 합니다. ('필수'에 선택 되였네요)

사용자가 동의하지 않을 경우

해당 값은 제공받지 못할 수 있다는 점을 고려하셔야 합니다.

 

- 네이버 로그인 과정에서 사용자가 “성별”과 “휴대전화번호” 제공에 동의를 한다면,

콜백 페이지 등에서 아래와 같은 방식으로 데이터를 DB에 매핑, 저장할 수 있습니다.


$naver_user_gender  = $me_response->response->gender;  // 'M' 혹은 'F'로 내려옴
$naver_user_mobile  = $me_response->response->mobile;  // +82-10-XXXX-XXXX 등 형태
// DB에 맞춰 가공
// 성별
if($naver_user_gender === 'M') {
    $mb_sex = '남';  // 또는 DB 스펙에 맞춰 'M' 그대로 저장
} elseif($naver_user_gender === 'F') {
    $mb_sex = '여';  // 또는 'F'
} else {
    $mb_sex = '';    // 혹은 null
}
// 휴대전화번호
// +82-10-XXXX-XXXX 형태일 경우 숫자만 추출하거나 포맷 재정의
$mb_hp = preg_replace('/[^0-9]/', '', $naver_user_mobile);  // 숫자만 추출
// 이후 INSERT/UPDATE 로직
$sql = "INSERT INTO your_member_table (mb_name, mb_hp, mb_sex, ...) 
        VALUES ('$mb_name', '$mb_hp', '$mb_sex', ...)";
// ...
주의: 네이버는 국가번호(+82) 포맷으로 반환하기도 하므로,

DB 스펙에 맞게 문자열 가공이 필요합니다.

 

★ 네이버에서는 가끔 민감 정보(성별, 휴대전화 등) 동의를 거부할 수 있습니다.

사용자가 동의하지 않았다면 해당 데이터가 오지 않을 수 있으니,

이를 대비한 예외처리 코드가 반드시 필요합니다.

★ 휴대전화번호를 저장하는 mb_hp 컬럼은

국제번호 지원을 위해 VARCHAR(20) 이상(권장 30)으로 설정하고,

+(국가번호), -(하이픈), 공백 등 특수문자가 포함될 수 있음을 고려해

일관된 포맷(예: 숫자만 혹은 +82 포함 형태)을 정해야 합니다.

★ 성별 컬럼인 mb_sex는 CHAR(1) 또는 VARCHAR(1)로 M, F만 저장해도 충분하나,

한글로 ‘남’, ‘여’ 등을 쓰려면 인코딩 정책에 따라 최대 CHAR(3) 정도로 잡을 수 있으며,

실제 값은 네이버에서 내려오는 형태(M, F 등)와 서비스 정책에 맞춰 매핑하십시오.

또한 필요 시 ‘무응답’, ‘기타’ 선택지를 고려할 수 있으므로 확장 가능성을 열어두고,

MySQL에서는 테이블을 utf8mb4 인코딩으로 생성해

한글 및 이모지 등 다양한 문자가 깨지지 않도록 설정합니다.

예시로 VARCHAR(30)의 mb_hp, CHAR(1)의 mb_sex를 둔 뒤,

CREATE TABLE 시 ENGINE=InnoDB와 DEFAULT CHARSET=utf8mb4를 지정하면,

해외번호를 포함한 휴대전화와 성별 정보를 안정적으로 저장하고 조회할 수 있습니다.

*아래는 MySQL 기준의 간단한 예시입니다.

  - 실제 테이블 이름과 엔진, 인코딩 설정은 프로젝트 환경에 맞게 조정하십시오.


CREATE TABLE `your_member_table` (
  `mb_id`      INT AUTO_INCREMENT PRIMARY KEY,   -- 예시로 PK 설정
  `mb_name`    VARCHAR(50)        NOT NULL,      -- 회원 이름 (UTF-8 인코딩 가정)
  `mb_hp`      VARCHAR(30)        DEFAULT NULL,  -- 휴대전화번호
  `mb_sex`     CHAR(1)            DEFAULT NULL,  -- 'M' or 'F' (또는 '남'/'여')
  `mb_email`   VARCHAR(100)       DEFAULT NULL,  -- 이메일 저장 가능
  `mb_regdate` DATETIME           DEFAULT NOW(), -- 가입일
  ...
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 

= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =

 

★ 아래의 예시는 [정식버전]그누보드(영카트) 5.6.4를 참고함

*콜백 로직 (bbs/register_form_update.php)


// 네아로 액세스 토큰으로 사용자 정보 가져오기
$me_response = getNaverProfile($accessToken);
// 휴대전화번호와 성별 데이터 확인
$naver_user_mobile = isset($me_response->response->mobile) ? $me_response->response->mobile : null;
$naver_user_gender = isset($me_response->response->gender) ? $me_response->response->gender : null;
// 데이터 가공: 성별
if ($naver_user_gender === 'M') {
    $mb_sex = '남'; // 또는 'M'으로 저장
} elseif ($naver_user_gender === 'F') {
    $mb_sex = '여'; // 또는 'F'로 저장
} else {
    $mb_sex = null; // 동의하지 않은 경우
}
// 데이터 가공: 휴대전화번호
$mb_hp = $naver_user_mobile ? preg_replace('/[^0-9]/', '', $naver_user_mobile) : null; // 숫자만 추출
// 예외 처리: 동의하지 않은 경우
if (!$mb_hp || !$mb_sex) {
    die('휴대전화번호와 성별 제공에 동의하지 않았습니다.');
}
// DB 저장 로직
$sql = "INSERT INTO your_member_table (mb_name, mb_hp, mb_sex, ...) 
        VALUES ('$mb_name', '$mb_hp', '$mb_sex', ...)";
$result = mysqli_query($conn, $sql);
if (!$result) {
    die('회원 정보 저장 실패: ' . mysqli_error($conn));
}

*유효성 검사 함수 (lib/register.lib.php)


function validateNaverUserData($mobile, $gender) {
    if (empty($mobile) || empty($gender)) {
        return false;
    }
    // 성별 값 확인
    if (!in_array($gender, ['M', 'F', '남', '여'])) {
        return false;
    }
    return true;
}

*예외 처리 로직

bbs/register_form_update.php에서 동의하지 않은 경우 메시지를 출력.


if (!$mb_hp || !$mb_sex) {
    echo "<script>alert('휴대전화번호와 성별 제공에 동의하지 않으셨습니다.'); history.back();</script>";
    exit;
}

/plugin/social/Hybrid/Porviders/Naver.php 에서 해당 이름 가져오는 부분을 확인해 보셔야 하며


mb_hp,mb_sex는 해당 정보를 제대로 가져오는지 보시고 해당 부분에 커스텀 해서 적용해서 처리해 주셔야 합니다.

참고하셔서 디버깅 해서 수정적용을 해야 하는 부분입니다.


 

답변을 작성하시기 전에 로그인 해주세요.
전체 0
QA 내용 검색

회원로그인

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