관리 메뉴

웹개발자의 기지개

[PHP] 네이버 로그인 구현하기 본문

PHP

[PHP] 네이버 로그인 구현하기

http://portfolio.wonpaper.net 2021. 1. 25. 03:59

최초에 네이버 개발자센터에서 로그인하고, 해당 사이트에서 logo 이미지와 각종 설정 작업을 한다.

 

developers.naver.com

 

NAVER Developers

네이버 오픈 API들을 활용해 개발자들이 다양한 애플리케이션을 개발할 수 있도록 API 가이드와 SDK를 제공합니다. 제공중인 오픈 API에는 네이버 로그인, 검색, 단축URL, 캡차를 비롯 기계번역, 음

developers.naver.com

어플리케이션 이름을 등록하고, 작업환경을 추가하면서, 

네이버로그인을 시작할 로그인실제 페이지와 콜백 페이지를 설정해 준다.

필자는 일단 PC웹과 모바일웹 추가지를 설정하였다.

제공정보는 원하는 부분을 체크하도록하자.

 

 

Client ID 와 Client Secret 값을 따로 잘 기억해둔다.

연동페이지에서 필요하다.

 

위와 같이 설정이 끝났으면, 아래의 페이지를 다 작성하고, 

검수과정을 거쳐야 한다.

진행 단계 캡처 이미지도 필요하다.

 

[네이버 로그인 검수 가이드]

developers.naver.com/docs/login/verify/

 

네아로 사전 검수 가이드

네아로 사전 검수 가이드

developers.naver.com

 

 

[ login.php ] - 로그인페이지 만들기

 

1
2
3
4
5
6
7
8
<?
define('NAVER_CLIENT_ID', '클라이언트ID');
define('NAVER_CLIENT_SECRET', '클라이언트Secret');
define('NAVER_CALLBACK_URL', 'http://도메인/callback_member.php');
$naverUrl = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=".NAVER_CLIENT_ID."&redirect_uri=".urlencode(NAVER_CALLBACK_URL);
?>
 
<a href="<?=$naverUrl?>">네이버로그인</a>
cs

 

 

[ callback_member.php ]  - 콜백처리 페이지

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?
session_start();
 
define('NAVER_CLIENT_ID''클라이언트ID');
define('NAVER_CLIENT_SECRET''클라이언트Secret');
define('NAVER_CALLBACK_URL''http://도메인/callback_member.php');
 
 
$naver_curl = "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=".NAVER_CLIENT_ID."&client_secret=".NAVER_CLIENT_SECRET."&redirect_uri=".urlencode(NAVER_CALLBACK_URL)."&code=".$_GET['code'];
 
// 토큰값 가져오기 
$is_post = false
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $naver_curl); 
curl_setopt($ch, CURLOPT_POST, $is_post); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
 
$response = curl_exec ($ch); 
$status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
curl_close ($ch); 
 
if($status_code == 200){ 
    $responseArr = json_decode($responsetrue); 
 
      // 토큰값으로 네이버 회원정보 가져오기 
      $headers = array'Content-Type: application/json', sprintf('Authorization: Bearer %s'$responseArr['access_token']) ); 
      $is_post = false
      $me_ch = curl_init(); 
      curl_setopt($me_ch, CURLOPT_URL, "https://openapi.naver.com/v1/nid/me"); 
      curl_setopt($me_ch, CURLOPT_POST, $is_post ); 
      curl_setopt($me_ch, CURLOPT_HTTPHEADER, $headers); 
      curl_setopt($me_ch, CURLOPT_RETURNTRANSFER, true); 
      $res = curl_exec ($me_ch); 
      curl_close ($me_ch); 
      $res_data = json_decode($res , true); 
       
 
    /*
    {
      "resultcode": "00",
      "message": "success",
      "response": {
        "email": "openapi@naver.com",
        "nickname": "OpenAPI",
        "profile_image": "https://ssl.pstatic.net/static/pwe/address/nodata_33x33.gif",
        "age": "40-49",
        "gender": "F",
        "id": "32742776",
        "name": "오픈 API",
        "birthday": "10-01"
      }
    }
    */
 
      if ($res_data ['response']['id']) { 
      //해당 아이디값을 정상적으로 가져온다면 디비에 해당 아이디로 회원가입 여부 확인 하여 회원 가입을 하였으면 자동 로그인 구현.
 
            include "../inc/config.php";
 
            $query = "select * from 회원테이블 where email='"$res_data ['response']['email'] ."'";
            $memRes = mysql_query($query);
            $memRow = mysql_fetch_array($memRes);
 
            if($memRow[mno]){ // 이미 가입된 회원이면 자동로그인한다.
 
                $_SESSION[m_id]        = $memRow['email'];
                $_SESSION[m_name]    = $memRow['name'];
                $_SESSION[m_level]    = $memRow['level'];
                echo("<meta http-equiv='refresh' content='0;URL=/'>");
 
                exit;
            } else {          // 새로 회원가입을 하고 자동로그인추가한다.
                
                $reg_date = time();
                $query = "insert into 회원테이블(email,name,naver_id) values ('".$res_data ['response']['email']."','".$res_data ['response']['name']."','".$res_data ['response']['id']."')";    
                mysql_query($query) or die("Insert error!");
 
                $_SESSION[m_id]        = $res_data ['response']['email'];
                $_SESSION[m_name]    = $res_data ['response']['name'];
                $_SESSION[m_level]    = '1';
                echo("<meta http-equiv='refresh' content='0;URL=/'>");
 
                exit;      
            }
        
 
      }
}
?>
cs

 

 

참고 : coddingj.tistory.com/24?category=760412

Comments