네이버 로그인 직접구현시 활용팁 > 그누보드5 팁자료실

그누보드5 팁자료실

네이버 로그인 직접구현시 활용팁 정보

네이버 로그인 직접구현시 활용팁

본문

네이버 로그인 플로우

= 심사가 있어서 단계별로 절차를 체크하다가 정리해서 남깁니다.

  • 네이버 로그인 URL로 이동

  • callback.php 로 접근

  • callback.php에서 access_token 획득

  • 네이버 사용자 정보 조회

  • g5_member 테이블에 회원 존재 여부 확인

  • 없으면 회원 자동 가입

  • 있으면 해당 회원으로 세션 로그인 처리

  • 원하는 페이지로 redirect

 


<?php
$client_id = "네이버_CLIENT_ID";
$redirectURI = urlencode("https://도메인/naver/callback.php");
$state = md5(microtime().mt_rand());
$_SESSION['naver_state'] = $state;
$naverLoginUrl = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id={$client_id}&redirect_uri={$redirectURI}&state={$state}";
?>
<a href="<?php echo $naverLoginUrl; ?>">네이버 로그인</a>
 

 


<?php
include_once('../common.php'); // 그누보드 필수
$client_id     = "네이버_CLIENT_ID";
$client_secret = "네이버_CLIENT_SECRET";
$code  = $_GET["code"];
$state = $_GET["state"];
// state 체크 (보안 강화)
if($_SESSION['naver_state'] != $state) {
    die("Invalid State");
}
/* -------------------------------------------------------------------------- */
/*   1) 액세스 토큰 요청                                                      */
/* -------------------------------------------------------------------------- */
$token_url = "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code"
            ."&client_id={$client_id}"
            ."&client_secret={$client_secret}"
            ."&code={$code}"
            ."&state={$state}";
$response = file_get_contents($token_url);
$token_data = json_decode($response, true);
$access_token = $token_data['access_token'];
/* -------------------------------------------------------------------------- */
/*   2) 사용자 정보 불러오기                                                  */
/* -------------------------------------------------------------------------- */
$header = "Authorization: Bearer ".$access_token;
$profile_url = "https://openapi.naver.com/v1/nid/me";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $profile_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array($header));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$profile_response = curl_exec($ch);
curl_close($ch);
$profile = json_decode($profile_response, true);
if($profile['resultcode'] != "00") {
    die("NAVER API ERROR");
}
$naver_id    = $profile['response']['id'];
$nickname    = $profile['response']['nickname'] ?? '네이버사용자';
$email       = $profile['response']['email'] ?? '';
$name        = $profile['response']['name'] ?? '';
/* -------------------------------------------------------------------------- */
/*   3) g5_member 테이블에서 회원 존재 여부 확인                             */
/* -------------------------------------------------------------------------- */
$sql = "SELECT * FROM g5_member WHERE mb_naver_id = '$naver_id'";
$mb = sql_fetch($sql);
/* -------------------------------------------------------------------------- */
/*   4) 신규 회원이면 자동 회원가입                                           */
/* -------------------------------------------------------------------------- */
if(!$mb['mb_id']) {
    // mb_id 생성 방식: naver_ + 해시
    $new_mb_id = "naver_".substr($naver_id, 0, 15);
    $now = G5_TIME_YMDHIS;
    $sql = "
        INSERT INTO g5_member SET
            mb_id = '{$new_mb_id}',
            mb_naver_id = '{$naver_id}',
            mb_name = '{$name}',
            mb_nick = '{$nickname}',
            mb_email = '{$email}',
            mb_datetime = '{$now}',
            mb_ip = '{$_SERVER['REMOTE_ADDR']}',
            mb_level = 2
    ";
    sql_query($sql);
    // 다시 조회
    $mb = get_member($new_mb_id);
}
/* -------------------------------------------------------------------------- */
/*   5) 그누보드 회원 세션 로그인 처리                                       */
/* -------------------------------------------------------------------------- */
set_session('ss_mb_id', $mb['mb_id']);
set_session('ss_mb_key', md5($mb['mb_datetime'] . $_SERVER['REMOTE_ADDR']));
/* -------------------------------------------------------------------------- */
/*   6) 로그인 후 리다이렉트                                                  */
/* -------------------------------------------------------------------------- */
goto_url('/'); // 원하는 페이지로 이동
 

 


ALTER TABLE g5_member ADD mb_naver_id varchar(50) DEFAULT NULL;
 

 

 

추천
5

댓글 1개

전체 2,741 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

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