뭘 이런걸..

Posted
Filed under Tech/프로그래밍
요즘 문중 홈페이지를 새로 만드는 작업을 하고 있고, 여기에 회원 인증을 OAuth로 구성을 하고 있습니다. 대충 구글/페이스북/트위터/다음/네이트를 지원하고 있는데, Naver의 경우에는 Naver OAuth가 회원 정보를 주지 않아서 구현만 하고 사용은 하지 않고 있었습니다.

그런데 얼마전, 네이버에서 "네이버 아이디로 로그인"이라는 API를 새로 런칭 하였고, 이 API는 OAuth2 기반으로 구현을 하였더군요. (Naver OAuth는 OAuth10a로 구현되어 있습니다.)

사이트 설명에서는 mobile만 library를 지원하고 PC에서는 그냥 설명만 있어서, 그래도 네이버인데 누군가 만들지 않을까 하고선 한두달을 기다렸는데 나오지를 않더군요.

아무래도 OAuth로 회원 인증을 하려다 보니, 우리나라에서 가장 많은 사용자를 가진 네이버를 무시할 수 없고, 또한 문중 어르신들에게 네이버 외에 아이디가 없으면 다른 곳에 가입을 하라고 권유를 드리기가 너무 힘들어서 결국에는 구현을 해 보았습니다.

일단 설치는 pear 저장소를 통해서 배포를 하므로, 아래와 같이 할 수 있습니다. 자세한 사항은 OOPS Pear repository 홈페이지를 참고 하세요.

[root@main ~] pear channel-discover pear.oops.org
Adding Channel "pear.oops.org" succeeded
Discovery of channel "pear.oops.org" succeeded
[root@main ~] pear install oops/NAVER


그러면 간단한 사용법을 적어 보겠습니다.

일단 "네이버 아이디로 로그인" API를 사용하려면 OAuth2 ClientID와 ClientSecret key를 발급 받아야 합니다. 다른 곳과는 다르게 네이버는 심사를 하더군요. 최대 3일 이내에 처리를 해 주기는 합니다만, 경쟁상대인 다음도 심사를 하지는 않는데 좀 그렇더군요. 그리고 사용 조건도 상당히 까다로운 편입니다. 네이버 BI를 지켜야 하는 등 ..

일단 발급을 받았다면 다음의 코드와 같이 작성할 수 있습니다. 굉장히 심플 합니다. ^^;
블러그에 코드가 별로 이쁘게 나오지를 않으니 가독성을 위해서는 다음 문서들을 참고 하세요

NAVER OAuth2 pear package Reference
NAVER OAuth pear package 예제 코드

<?php
/* $Id: test.php 1 2014-05-16 19:11:07Z oops $ */

require_once 'NAVER.php';

session_start ();

// 에러 발생시에 catch를 하기 위하여 error handler를 등록
set_error_handler ('myException::myErrorHandler');

try {
    // 발급받은 키를 등록한다.
    $login = (object) array (
        'id'       => '8avBegO24BpmziA3027D',
        'secret'   => '1zUVPMAl5R',
        'callback' => 'http://domain.com/path/this/file'
    );

    // 인증 과정을 수행
    $naver = new NAVER ($login);

    // 인증 과정 완료 후 사용자 정보를 가져옴
    $user = $naver->getUser ();

    // 유저 정보 출력
    print_r ($user);

} catch ( myException $e ) {
    // 에러 발생시에 다음 출력
    echo '<pre>' . PHP_EOL;
    echo $e->Message () . PHP_EOL;
    print_r ($e->TraceAsArray ());
    exit;
}

/*
 * Local variables:
 * tab-width: 4
 * c-basic-offset: 4
 * End:
 * vim600: noet sw=4 ts=4 fdm=marker
 * vim<600: noet sw=4 ts=4
 */
?>

2014/05/17 05:35 2014/05/17 05:35