Net::OAuth2を使ってGoogle OAuth2をやってみた


perlのOAuthモジュールである「Net::OAuth2」を使い、Google OAuth2を行なってみたのでログとして残しておきたいと思います。

まず、OAuthで使用するアプリはここから作成しておきます。

ソースは下記のようになりました。

広告

FWはDancerを使っているため、一部Dancerのシンタックスが含まれています。

use Dancer ':syntax';
use Net::OAuth2::Client;
 
sub oauth {
    return Net::OAuth2::Client->new(
        "Client ID",
        "Client secret",
        site             => 'https://www.googleapis.com',
        authorize_url    => 'https://accounts.google.com/o/oauth2/auth',
        access_token_url => 'https://accounts.google.com/o/oauth2/token',
    )->web_server( redirect_uri => uri_for('/auth/google/callback') );
}
 
get '/auth/google' => sub {
    my $url  = oauth->authorize_url(
        scope => 'https://www.googleapis.com/auth/userinfo.profile',
    );
    redirect $url;
};
 
get '/auth/google/callback' => sub {
    if ( params->{error} ) {
        # OAuth拒否
    }
    elsif ( params->{code} ) {
        # OAuth許可
        my $access_token = oauth->get_access_token( params->{code} );
        my $response = $access_token->get('/oauth2/v1/userinfo');
        if ( $response->is_success ) {
            my $user = from_json( $response->decoded_content, { utf8 => 1 } );
            # ユーザ情報を使って何か処理...
        }
    }
};

関連記事