웹스쿨
네이버 로그인 API(oAuth) 개발 본문
사이트에 유저분들과의 더욱더 쫀쫀한 관계를 유지하고 싶어서이길 개뿔... 글좀 남겨주세욤 ㅠㅠ
여튼 이런저런 이유로 인해 우연찮게 사이트에 SNS 로그인 기능 하나쯤은 있었으면 좋겠다는, 순수한? 이유 하나만으로 개발을 시작했습니다.
뭐 거창하게 class 만들고 지지고 볶고 자시고 해도 되겠지만 굳이 그럴필요까지는 못 느끼겠고, 그냥 간단한게 짰습니다.
로그인 버튼 만들기
- function generate_state() {
- }
- $naver_login['client_id'] = "네이버에서 발급받은 클라이언트 key";
- $naver_login['client_secret'] = "네이버에서 발급받은 시큐릿 key";
- $naver_login['callback'] = "네이버 로그인 api를 처리할 나의 callback url";
- $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 소스 공개합니다.
- $code = $_GET["code"];
- $state = $_GET["state"];
- $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;
- $is_post = false;
- //echo "status_code:".$status_code;
- if($status_code == 200)
- {
- "url" => "https://openapi.naver.com/v1/nid/me",
- "Authorization: Bearer ".$result['access_token']
- )
- );
- $info = get_curl($param);
- //print_r2($info_array);
- /*
- //리턴받은 데이터
- Array
- (
- [resultcode] => 00
- [message] => success
- [response] => Array
- (
- [id] => 고유아이디값
- [nickname] => 네이버 닉네임
- [profile_image] => 네이버 프로필이미지
- [email] => 네이버 메일
- [name] => 이름
- )
- )
- */
- $response = $info_array['response'];
- }
- else
- {
- echo "Error 내용:".$response;
- }
아래는 제가 만든 get_curl 함수입니다.
- function get_curl($param)
- {
- #접속할 URL 주소
- #FALSE 를 설정하면 cURL는 서버 인증서의 유효성을 검사하지 않습니다.#다른 인증를 CURLOPT_CAINFO 옵션 지정하거나 CURLOPT_CAPATH 옵션 증명서 디렉토리를 지정합니다.
- #SSL 버젼 지정. 기본값은 2
- #curl_setopt ($ch, CURLOPT_SSLVERSION,1);
- #TRUE 를 설정하면 헤더의 내용을 출력합니다.
- #curl_setopt($ch, CURLOPT_HEADER, 1);
- #HTTP 요청에서 사용되는 "User - Agent :" 헤더의 내용.
- if($param['cookie']){
- #curl_close 호출 될 때 쿠키를 파일 이름으로 저장.
- #쿠키의 데이터를 http 헤더를 통해 보낸다.
- }
- #POST 로 데이터 전송.
- #TRUE 를 설정하면 HTTP POST를 수행합니다. POST는 application / x - www - form - urlencoded 식으로 이루어집니다. 이것은 일반적인 HTML 양식과 같은 형식입니다.
- if($param['post_data']){
- }
- if($param['header']){
- }
- #최대 실행 시간(초)
- #TRUE 를 설정하면 curl_exec () 의 반환 값을 문자열로 반환합니다. 일반적으로 데이터를 직접 출력합니다.
- return $result;
- }
뭐 간단한게 요약을 하자면,
네이버에서 발급받은 key를 네이버에 던지면, 네이버에서 토큰값을 던져준다. 그럼 그 토큰값을 이용해서 사용자 정보를 호출하면, 사용자 정보 JSON 값을 받아온다.
그럼 JSON 값으로 이제 알아서 하면 된다~ 라는 내용입니다.
그런데 본인은 로그인이 되는데, 다른 사람들은 아직 로그인이 안됩니다.
네이버에서 심사를 통과시켜줘야 된대요~
심사기간은 2~3일 걸린다는데 일단 기다려 보겠습니다.
https://webschool.kr/?v=board_view&board_key=7&idx=602
에서 작성한 글입니다. 소스코드의 경우 해당 블로그에서 이뿌게 노출이 되지 않을 수 있사오니, 위 링크로 들어오셔서 보시길 바랍니다.
'개발 경험 Tip > PHP' 카테고리의 다른 글
SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed (0) | 2023.03.31 |
---|---|
문자열 안의 모든 img 태그안의 src 이미지를 base64 로 치환하기 (0) | 2023.03.31 |
php 초단위를 일/시간/분/초 단위로 변경하고자 할때 (0) | 2023.03.31 |
php로 사이트 체류시간 구현하기 (0) | 2023.03.31 |
안드로이드 GCM 호출 예시 (0) | 2023.03.31 |