웹스쿨

네이버 로그인 API(oAuth) 개발 본문

개발 경험 Tip/PHP

네이버 로그인 API(oAuth) 개발

마스터욱 2023. 3. 31. 00:20
반응형

사이트에 유저분들과의 더욱더 쫀쫀한 관계를 유지하고 싶어서이길 개뿔... 글좀 남겨주세욤 ㅠㅠ

 

여튼 이런저런 이유로 인해 우연찮게 사이트에 SNS 로그인 기능 하나쯤은 있었으면 좋겠다는, 순수한? 이유 하나만으로 개발을 시작했습니다.

뭐 거창하게 class 만들고 지지고 볶고 자시고 해도 되겠지만 굳이 그럴필요까지는 못 느끼겠고, 그냥 간단한게 짰습니다.

 

로그인 버튼 만들기

  1. function generate_state() {
  2.     $mt = microtime();
  3.     $rand = mt_rand();
  4.     return md5($mt . $rand);
  5. }
  6.  
  7. $naver_login = array();
  8. $naver_login['client_id'] = "네이버에서 발급받은 클라이언트 key";
  9. $naver_login['client_secret'] = "네이버에서 발급받은 시큐릿 key";
  10. $naver_login['callback'] = "네이버 로그인 api를 처리할 나의 callback url";
  11. $naver_login['apiURL'] = "https://nid.naver.com/oauth2.0/authorize?response_type=code&client_id=".$naver_login['client_id']."&redirect_uri=".urlencode($naver_login['callback'])."&state=".generate_state();

네이버 어플리케이션 등록 및 키 발급 : https://developers.naver.com/apps/#/register

위 페이지에서 개발 어플리케이션 등록후, client_id와 client_secret 키를 발급받으면 됩니다.

아 그리고 callback URL 입력하는 부분과 그 밖에 API 설정값들이 있으니 다 집어넣어주세요~ 한글 읽을줄 아시면 다 할줄 알아요 헤헤~

 

위 $naver_login['apiURL'] 을 로그인 버튼 link 로 사용하면 됩니다.

 

그리고 callback url 소스 공개합니다.

  1. $code = $_GET["code"];
  2. $state = $_GET["state"];
  3. $redirectURI = urlencode($naver_login['callback'])// 현재 Callback Url 입력
  4.  
  5. $url = "https://nid.naver.com/oauth2.0/token?grant_type=authorization_code&client_id=".$naver_login['client_id']."&client_secret=".$naver_login['client_secret']."&redirect_uri=".$redirectURI."&code=".$code."&state=".$state;
  6. $is_post = false;
  7.  
  8. $ch = curl_init();
  9. curl_setopt($ch, CURLOPT_URL, $url);
  10. curl_setopt($ch, CURLOPT_POST, $is_post);
  11. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  12.  
  13. $headers = array();
  14. $response = curl_exec ($ch);
  15. $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  16. //echo "status_code:".$status_code;
  17.  
  18. curl_close ($ch);
  19.  
  20. if($status_code == 200)
  21. {
  22.     $result = json_decode($responsetrue);
  23.     $param = array(
  24.         "url"       => "https://openapi.naver.com/v1/nid/me",
  25.         "header"    => array(
  26.             "Authorization: Bearer ".$result['access_token']
  27.         )
  28.     );
  29.     $info = get_curl($param);
  30.     $info_array = json_decode($infotrue);
  31.     //print_r2($info_array);
  32.     /*
  33.         //리턴받은 데이터
  34.         Array
  35.         (
  36.             [resultcode] => 00
  37.             [message] => success
  38.             [response] => Array
  39.                 (
  40.                     [id] => 고유아이디값
  41.                     [nickname] => 네이버 닉네임
  42.                     [profile_image] => 네이버 프로필이미지
  43.                     [email] => 네이버 메일
  44.                     [name] => 이름
  45.                 )
  46.  
  47.         )
  48.     */
  49.     $response = $info_array['response'];
  50. }
  51. else
  52. {
  53.     echo "Error 내용:".$response;
  54. }

 

아래는 제가 만든 get_curl 함수입니다.

  1. function get_curl($param)
  2. {
  3.     $ch = curl_init();
  4.  
  5.     #접속할 URL 주소
  6.     curl_setopt($ch, CURLOPT_URL, $param['url']);
  7.  
  8.     #FALSE 를 설정하면 cURL는 서버 인증서의 유효성을 검사하지 않습니다.#다른 인증를 CURLOPT_CAINFO 옵션 지정하거나 CURLOPT_CAPATH 옵션 증명서 디렉토리를 지정합니다.
  9.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  10.  
  11.     #SSL 버젼 지정. 기본값은 2
  12.     #curl_setopt ($ch, CURLOPT_SSLVERSION,1);
  13.  
  14.     #TRUE 를 설정하면 헤더의 내용을 출력합니다.
  15.     #curl_setopt($ch, CURLOPT_HEADER, 1);
  16.  
  17.     #HTTP 요청에서 사용되는 "User - Agent :" 헤더의 내용.
  18.     curl_setopt($ch, CURLOPT_USERAGENT, CURL_AGENT);
  19.  
  20.     if($param['cookie']){
  21.         #curl_close 호출 될 때 쿠키를 파일 이름으로 저장.
  22.         curl_setopt($ch, CURLOPT_COOKIEJAR, CURL_COOKIE);
  23.  
  24.         #쿠키의 데이터를 http 헤더를 통해 보낸다.
  25.         curl_setopt($ch, CURLOPT_COOKIEFILE, CURL_COOKIE);
  26.     }
  27.  
  28.     #POST 로 데이터 전송.
  29.     #TRUE 를 설정하면 HTTP POST를 수행합니다. POST는 application / x - www - form - urlencoded 식으로 이루어집니다. 이것은 일반적인 HTML 양식과 같은 형식입니다.
  30.     if($param['post_data']){
  31.         curl_setopt($ch, CURLOPT_POST, 1);
  32.         curl_setopt($ch, CURLOPT_POSTFIELDS, $param['post_data']);
  33.     }
  34.  
  35.     if($param['header']){
  36.         curl_setopt($ch, CURLOPT_HTTPHEADER, $param['header']);
  37.     }
  38.  
  39.     #최대 실행 시간(초)
  40.     curl_setopt($ch, CURLOPT_TIMEOUT, 30);
  41.  
  42.     #TRUE 를 설정하면 curl_exec () 의 반환 값을 문자열로 반환합니다. 일반적으로 데이터를 직접 출력합니다.
  43.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  44.  
  45.     $result = curl_exec($ch);
  46.     curl_close($ch);
  47.  
  48.     return $result;
  49. }

뭐 간단한게 요약을 하자면,

네이버에서 발급받은 key를 네이버에 던지면, 네이버에서 토큰값을 던져준다. 그럼 그 토큰값을 이용해서 사용자 정보를 호출하면, 사용자 정보 JSON 값을 받아온다.

그럼 JSON 값으로 이제 알아서 하면 된다~ 라는 내용입니다.

 

그런데 본인은 로그인이 되는데, 다른 사람들은 아직 로그인이 안됩니다.

네이버에서 심사를 통과시켜줘야 된대요~

심사기간은 2~3일 걸린다는데 일단 기다려 보겠습니다.


이 게시글은
https://webschool.kr/?v=board_view&board_key=7&idx=602
에서 작성한 글입니다. 소스코드의 경우 해당 블로그에서 이뿌게 노출이 되지 않을 수 있사오니, 위 링크로 들어오셔서 보시길 바랍니다.

반응형