네이버 로그인 직접구현시 활용팁 정보
네이버 로그인 직접구현시 활용팁
본문
네이버 로그인 플로우
= 심사가 있어서 단계별로 절차를 체크하다가 정리해서 남깁니다.
-
네이버 로그인 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
5
댓글 1개
좋은 정보 감사합니다.