제목 | 네이버 로그인 이용하기 | ||
---|---|---|---|
글쓴이 | 변종원(웅파) | 작성시각 | 2014/10/06 18:29:44 |
|
|||
http://developer.naver.com/wiki/pages/NaverLogin 에서 이용절차에 따라 이용신청을 하셔야 합니다. 작업할 물리적 주소(Callback URL)가 있어야 신청이 되며 테스트를 할 수 있습니다. 이 주소는 로그인후 이동할 주소입니다. 아래와 같이 간단한 프로그램을 작성했습니다. //csrf를 막기위한 체크값 생성함수 function generate_state() { $mt = microtime(); $rand = mt_rand(); return md5($mt . $rand); } $p['state'] = generate_state(); $p['client_id'] = '로그인이용신청후 받은 클라이언트아이디'; $p['client_secret'] = '시크릿키'; $p['response_type'] = 'code'; $p['redirect_url'] = '로그인후 이동할 주소'; //여기서는 현재 파일을 그대로 이용 //네이버 로그인 등록시 입력한 주소입니다. 틀리면 작동하지 않습니다. // $url = 'https://nid.naver.com/oauth2.0/authorize?client_id='.urlencode($p['client_id']).'&response_type=code&redirect_uri='.urlencode($p['redirect_url']).'&state='.$p['state']; //code는 로그인이 성공하고 나면 redirect_url에 인자로 돌려주는 값입니다. //이 값이 있어야 access_token을 요청할 수 있습니다. if(!$_GET['code']) { header('Location: ' . $url); } //위 요청을 하게되면 네이버 로그인창이 뜹니다. (정보동의 과정이 나올수도 있습니다) //이 라인은 네이버 로그인창에서 로그인이 끝나고 나서 redirect_url에 code를 전송했을때 //실행됩니다. if($_GET['code']) { $p['code'] = $_GET['code']; } //access_token을 요청하는 주소. 위 검증코드가 있어야 실행됩니다. $url2 = 'https://nid.naver.com/oauth2.0/token?client_id='.urlencode($p['client_id']).'&client_secret='.urlencode($p['client_secret']).'&grant_type=authorization_code&state='.$p['state'].'&code='.$p['code']; $json = file_get_contents($url2); $data = json_decode($json); echo $data->access_token; //여기까지 네이버 로그인후 access_token을 가져옵니다. 로그인만 해도 되는데 access_token을 받아오는 이유는 회원정보나 기타 요청에 access_token이 필요하기 때문입니다. $access_token = '위에서 받은 access_token'; //해시정보를 요청하는 주소입니다. $page = 'https://apis.naver.com/nidlogin/nid/getHashId_v2.xml'; //헤더에 access_token을 담는 부분입니다. $headers = array( "Authorization: Bearer " . $access_token ); //curl을 이용하여 전송합니다. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,$page); curl_setopt($ch, CURLOPT_TIMEOUT, 60); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); ob_start(); curl_exec($ch); //화면에 출력되는 xml을 변수에 담습니다. $data0 = ob_get_contents(); curl_close($ch); //xml파싱 $xml = simplexml_load_string($data0,'SimpleXMLElement', LIBXML_NOCDATA); //이 아이디가 나온다는 의미는 access_token이 유효하기 때문에 그에 해당하는 정보를 돌려준거라 access_token을 검증하는 의미입니다. echo $xml->response[0]->enc_id[0]; |
|||
다음글 | mod_rewrite 간략 정리본 (4) | ||
이전글 | ci에서 ajax의 csrf_protection 회피(... (2) | ||
한대승(불의회상)
/
2014/10/07 07:57:10 /
추천
0
|
변종원(웅파)
/
2014/10/07 09:48:04 /
추천
0
한대승/ 라이브러리는 언제 될지 아무도 몰라요. ㅎㅎㅎ
|
들국화
/
2014/10/07 09:49:07 /
추천
0
감사합니다. ^^
|
코드이그
/
2014/10/07 12:07:47 /
추천
0
오... 두근두근 하네요 제목만 봐도 ㅋㅋ
|
케이든
/
2014/10/07 16:25:00 /
추천
0
좋은 정보 감사합니다
|
좋은 정보 감사 합니다.
고생 하셨습니다. ^^