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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(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는 해당 정보를 제대로 가져오는지 보시고 해당 부분에 커스텀 해서 적용해서 처리해 주셔야 합니다.

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


 

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

회원로그인

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